def _move_reports_recursive(obj, path: Path): for attribute in (vars(obj) if not isinstance(obj, dict) else obj): attribute_value = getattr(obj, attribute) if not isinstance(obj, dict) else obj[attribute] if isinstance(attribute_value, list) and all(isinstance(item, ReportResult) for item in attribute_value): new_attribute_values = [] for report_result in attribute_value: new_attribute_values.append(Util.update_report_paths(report_result, path)) setattr(obj, attribute, new_attribute_values) elif isinstance(attribute_value, list) and all(isinstance(item, HPAssessmentState) for item in attribute_value): obj = HPHTMLBuilder._process_list_recursively(obj, attribute, attribute_value, path) elif isinstance(attribute_value, dict) and all( isinstance(item, HPLabelState) or isinstance(item, HPItem) for item in attribute_value.values()): obj = HPHTMLBuilder._process_dict_recursive(obj, attribute, attribute_value, path) elif isinstance(attribute_value, dict) and all(isinstance(item, list) for item in attribute_value.values()) and all( all(isinstance(item, HPItem) for item in item_list) for item_list in attribute_value.values()): obj = HPHTMLBuilder._process_hp_items(obj, attribute, attribute_value, path) elif isinstance(attribute_value, HPSelectionState): setattr(obj, attribute, HPHTMLBuilder._move_reports_recursive(attribute_value, path)) return obj
def make_html_map(state: ExploratoryAnalysisState, base_path: Path) -> dict: html_map = { "css_style": Util.get_css_content(ExploratoryAnalysisHTMLBuilder.CSS_PATH), "full_specs": Util.get_full_specs_path(base_path), 'immuneML_version': MLUtil.get_immuneML_version(), "analyses": [{ "name": name, "dataset_name": analysis.dataset.name if analysis.dataset.name is not None else analysis.dataset.identifier, "dataset_type": StringHelper.camel_case_to_word_string( type(analysis.dataset).__name__), "example_count": analysis.dataset.get_example_count(), "dataset_size": f"{analysis.dataset.get_example_count()} {type(analysis.dataset).__name__.replace('Dataset', 's').lower()}", "preprocessing_sequence": [{ "preprocessing_name": preprocessing.__class__.__name__, "preprocessing_params": ", ".join([ f"{key}: {value}" for key, value in vars(preprocessing).items() ]) } for preprocessing in analysis.preprocessing_sequence] if analysis.preprocessing_sequence is not None else [], "show_preprocessing": analysis.preprocessing_sequence is not None and len(analysis.preprocessing_sequence) > 0, "show_labels": analysis.label_config is not None and len(analysis.label_config.get_labels_by_name()) > 0, "labels": [{ "name": label.name, "values": str(label.values)[1:-1] } for label in analysis.label_config.get_label_objects()] if analysis.label_config else None, "encoding_key": analysis.encoder.name if analysis.encoder is not None else None, "encoding_name": StringHelper.camel_case_to_word_string( type(analysis.encoder).__name__) if analysis.encoder is not None else None, "encoding_params": [{ "param_name": key, "param_value": str(value) } for key, value in vars(analysis.encoder).items()] if analysis.encoder is not None else None, "show_encoding": analysis.encoder is not None, "report": Util.to_dict_recursive( Util.update_report_paths(analysis.report_result, base_path), base_path) } for name, analysis in state.exploratory_analysis_units.items()] } for analysis in html_map["analyses"]: analysis["show_tables"] = len( analysis["report"]["output_tables"] ) > 0 if "output_tables" in analysis["report"] else False analysis["show_text"] = len( analysis["report"]["output_text"] ) > 0 if "output_text" in analysis["report"] else False analysis[ "show_info"] = analysis["report"]["info"] is not None and len( analysis["report"] ["info"]) > 0 if "info" in analysis["report"] else False return html_map