Skip to content
Snippets Groups Projects
Commit e5129f07 authored by Caroline DE POURTALES's avatar Caroline DE POURTALES
Browse files

arrange callbacks

parent 8a04acd1
Branches
Tags
No related merge requests found
...@@ -6,15 +6,20 @@ ...@@ -6,15 +6,20 @@
</head> </head>
<body> <body>
<h1> What kind course_data_format.html of model, data, or instance can I upload ? </h1> <h1> Data format requirements</h1>
<h2> What is the option to add information on model ? </h2> <h2> An option to add information on model </h2>
<h3> Why ? </h3> <h3> Why ? </h3>
<p> There is a switch button, you can use it when you want to attach the csv you trained your model on or a feature mapping. This is useful when you didn't dump the features names in your pkl of model but still wants them to show up, or when the values are categorical. <p> There is a switch button, you can use it when you want to attach the csv you trained your model on or a feature mapping. This is useful when the values are categorical.
</p> </p>
<h3> How ? </h3> <h3> How ? </h3>
<p> If you decide to upload the dataset, it should be a .csv.
If you decide to upload the feature mapping, it is a .txt file.
</p>
<h2> What kind of model can I upload ? </h2> <h2> What kind of model can I upload ? </h2>
<p> You can only import .pkl models.</p> <p> You can only import .pkl models.</p>
......
...@@ -37,12 +37,31 @@ def register_callbacks(page_home, page_course, page_application, app): ...@@ -37,12 +37,31 @@ def register_callbacks(page_home, page_course, page_application, app):
def update_ml_type_options(value_ml_model): def update_ml_type_options(value_ml_model):
model_application = page_application.model model_application = page_application.model
model_application.update_ml_model(value_ml_model) model_application.update_ml_model(value_ml_model)
return model_application.solvers, model_application.solvers[0], model_application.xtypes, [list(model_application.xtypes.keys())[0]] return model_application.solvers, model_application.solvers[0], model_application.xtypes, [
list(model_application.xtypes.keys())[0]]
@app.callback(Output('pretrained_model_filename', 'children'),
Input('ml_pretrained_model_choice', 'filename'),
prevent_initial_call=True
)
def update_model_prertrained_name(pretrained_model_filename):
return pretrained_model_filename
@app.callback(Output('info_filename', 'children'),
Input('model_info_choice', 'filename'),
prevent_initial_call=True
)
def update_model_info_filename(model_info_filename):
return model_info_filename
@app.callback(Output('instance_filename', 'children'),
Input('ml_instance_choice', 'filename'),
prevent_initial_call=True
)
def update_instance_filename(instance_filename):
return instance_filename
@app.callback( @app.callback(
Output('pretrained_model_filename', 'children'),
Output('info_filename', 'children'),
Output('instance_filename', 'children'),
Output('graph', 'children'), Output('graph', 'children'),
Output('explanation', 'children'), Output('explanation', 'children'),
Input('ml_model_choice', 'value'), Input('ml_model_choice', 'value'),
...@@ -70,7 +89,7 @@ def register_callbacks(page_home, page_course, page_application, app): ...@@ -70,7 +89,7 @@ def register_callbacks(page_home, page_course, page_application, app):
# Choice of model # Choice of model
if ihm_id == 'ml_model_choice': if ihm_id == 'ml_model_choice':
model_application.update_ml_model(value_ml_model) model_application.update_ml_model(value_ml_model)
return None, None, None, None, None return None, None
# Choice of pkl pretrained model # Choice of pkl pretrained model
elif ihm_id == 'ml_pretrained_model_choice': elif ihm_id == 'ml_pretrained_model_choice':
...@@ -80,17 +99,22 @@ def register_callbacks(page_home, page_course, page_application, app): ...@@ -80,17 +99,22 @@ def register_callbacks(page_home, page_course, page_application, app):
model_application.update_pretrained_model(graph) model_application.update_pretrained_model(graph)
if not model_application.add_info: if not model_application.add_info:
model_application.update_pretrained_model_layout() model_application.update_pretrained_model_layout()
return pretrained_model_filename, None, None, model_application.component.network, None return model_application.component.network, None
else: else:
return pretrained_model_filename, None, None, None, None if model_application.model_info is None:
raise PreventUpdate
model_application.update_pretrained_model_layout_with_info(model_application.model_info,
model_info_filename)
return model_application.component.network, None
# Choice of information for the model # Choice of information for the model
elif ihm_id == 'model_info_choice': elif ihm_id == 'model_info_choice':
if model_application.ml_model is None:
raise PreventUpdate
model_info = parse_contents_data(model_info, model_info_filename) 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) model_application.update_pretrained_model_layout_with_info(model_info, model_info_filename)
return pretrained_model_filename, model_info_filename, None, model_application.component.network, None return model_application.component.network, None
# Choice of instance to explain # Choice of instance to explain
elif ihm_id == 'ml_instance_choice': elif ihm_id == 'ml_instance_choice':
...@@ -98,50 +122,42 @@ def register_callbacks(page_home, page_course, page_application, app): ...@@ -98,50 +122,42 @@ def register_callbacks(page_home, page_course, page_application, app):
raise PreventUpdate raise PreventUpdate
instance = parse_contents_instance(instance_contents, instance_filename) instance = parse_contents_instance(instance_contents, instance_filename)
model_application.update_instance(instance) model_application.update_instance(instance)
return pretrained_model_filename, model_info_filename, instance_filename, model_application.component.network, model_application.component.explanation return model_application.component.network, model_application.component.explanation
# Choice of number of expls # Choice of number of expls
elif ihm_id == 'number_explanations': elif ihm_id == 'number_explanations':
if model_application.ml_model is None or model_application.pretrained_model is None or len( 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:
model_application.instance) == 0 or model_application.xtype is None:
raise PreventUpdate raise PreventUpdate
model_application.update_enum(enum) model_application.update_enum(enum)
return pretrained_model_filename, model_info_filename, instance_filename, model_application.component.network, model_application.component.explanation return model_application.component.network, model_application.component.explanation
# Choice of AxP or CxP # Choice of AxP or CxP
elif ihm_id == 'explanation_type': elif ihm_id == 'explanation_type':
if model_application.ml_model is None or model_application.pretrained_model is None or len( 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:
model_application.instance) == 0 or model_application.enum <= 0:
raise PreventUpdate raise PreventUpdate
model_application.update_xtype(xtype) model_application.update_xtype(xtype)
return pretrained_model_filename, model_info_filename, instance_filename, model_application.component.network, model_application.component.explanation return model_application.component.network, model_application.component.explanation
# Choice of solver # Choice of solver
elif ihm_id == 'solver_sat': elif ihm_id == 'solver_sat':
if model_application.ml_model is None or model_application.pretrained_model is None or len( 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:
model_application.instance) == 0 or model_application.enum <= 0 or len(
model_application.xtype) == 0:
raise PreventUpdate raise PreventUpdate
model_application.update_solver(solver) model_application.update_solver(solver)
return pretrained_model_filename, model_info_filename, instance_filename, model_application.component.network, model_application.component.explanation return model_application.component.network, model_application.component.explanation
# Choice of AxP to draw # Choice of AxP to draw
elif ihm_id == 'expl_choice': elif ihm_id == 'expl_choice':
if model_application.ml_model is None or model_application.pretrained_model is None or len( 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:
model_application.instance) == 0 or model_application.enum <= 0 or len(
model_application.xtype) == 0:
raise PreventUpdate raise PreventUpdate
model_application.update_expl(expl_choice) model_application.update_expl(expl_choice)
return pretrained_model_filename, model_info_filename, instance_filename, model_application.component.network, model_application.component.explanation return model_application.component.network, model_application.component.explanation
# Choice of CxP to draw # Choice of CxP to draw
elif ihm_id == 'cont_expl_choice': elif ihm_id == 'cont_expl_choice':
if model_application.ml_model is None or model_application.pretrained_model is None or len( 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:
model_application.instance) == 0 or model_application.enum <= 0 or len(
model_application.xtype) == 0:
raise PreventUpdate raise PreventUpdate
model_application.update_cont_expl(cont_expl_choice) model_application.update_cont_expl(cont_expl_choice)
return pretrained_model_filename, model_info_filename, instance_filename, model_application.component.network, model_application.component.explanation return model_application.component.network, model_application.component.explanation
@app.callback( @app.callback(
Output('explanation', 'hidden'), Output('explanation', 'hidden'),
......
...@@ -119,6 +119,7 @@ class DecisionTreeComponent(): ...@@ -119,6 +119,7 @@ class DecisionTreeComponent():
instance_translated = self.translate_instance(instance) instance_translated = self.translate_instance(instance)
self.explanation = [] self.explanation = []
list_explanations_path = [] list_explanations_path = []
list_contrastive_explanations_path = []
explanation = self.dt.explain(instance_translated, enum=enum, xtype=xtype, solver=solver) explanation = self.dt.explain(instance_translated, enum=enum, xtype=xtype, solver=solver)
dot_source = visualize_instance(self.dt, instance_translated) dot_source = visualize_instance(self.dt, instance_translated)
......
...@@ -18,31 +18,31 @@ class Model(): ...@@ -18,31 +18,31 @@ class Model():
self.dic_xtypes = dic_xtypes self.dic_xtypes = dic_xtypes
self.ml_models = names_models self.ml_models = names_models
self.ml_model = '' self.ml_model = None
self.pretrained_model = '' self.pretrained_model = None
self.add_info = False self.add_info = False
self.model_info = '' self.model_info = None
self.enum = 1 self.enum = 1
self.xtypes = [] self.xtypes = []
self.xtype = "" self.xtype = None
self.solvers = [] self.solvers = []
self.solver = "" self.solver = None
self.instance = '' self.instance = None
self.list_expls = [] self.list_expls = []
self.list_cont_expls = [] self.list_cont_expls = []
self.expl = '' self.expl = None
self.cont_expl = '' self.cont_expl = None
self.component_class = '' self.component_class = None
self.component = '' self.component = None
def update_ml_model(self, ml_model_update): def update_ml_model(self, ml_model_update):
self.ml_model = ml_model_update self.ml_model = ml_model_update
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment