Example #1
0
    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