diff --git a/scripts/dash_timeline_static.py b/scripts/dash_timeline_static.py index 8dd4be4..6a04ae6 100644 --- a/scripts/dash_timeline_static.py +++ b/scripts/dash_timeline_static.py @@ -1,9 +1,11 @@ import time import webbrowser -from pathlib import Path +from collections.abc import Collection, Iterable from threading import Thread from typing import Any, Final, cast +import pandas as pd + # import dash_cytoscape as cyto import plotly.express as px from dash import ( @@ -21,20 +23,37 @@ from plotly.graph_objects import Figure import lang_main.io from lang_main.analysis import graphs, tokens -from lang_main.constants import SAVE_PATH_FOLDER, SPCY_MODEL +from lang_main.analysis.timeline import ( + calc_delta_to_next_failure, + filter_timeline_cands, +) +from lang_main.constants import ( + NAME_DELTA_FEAT_TO_NEXT_FAILURE, + NAME_DELTA_FEAT_TO_REPAIR, + SAVE_PATH_FOLDER, + SPCY_MODEL, +) from lang_main.errors import EmptyEdgesError, EmptyGraphError from lang_main.pipelines.predefined import ( build_tk_graph_render_pipe, build_tk_graph_rescaling_pipe, ) -from lang_main.types import EntryPoints, ObjectID, TimelineCandidates +from lang_main.types import ( + DataFrameTLFiltered, + EntryPoints, + HTMLColumns, + HTMLTable, + ObjectID, + TimelineCandidates, +) # ** data # p_df = Path(r'../results/test_20240619/TIMELINE.pkl').resolve() -p_df = lang_main.io.get_entry_point(SAVE_PATH_FOLDER, EntryPoints.TIMELINE) +p_df = lang_main.io.get_entry_point(SAVE_PATH_FOLDER, EntryPoints.TIMELINE_POST) (data,) = cast(tuple[DataFrame], lang_main.io.load_pickle(p_df)) +# data = cleanup_descriptions(data, properties=['ErledigungsBeschreibung']) # p_tl = Path(r'../results/test_20240619/TIMELINE_POSTPROCESSING.pkl').resolve() -p_tl = lang_main.io.get_entry_point(SAVE_PATH_FOLDER, EntryPoints.TIMELINE_POST) +p_tl = lang_main.io.get_entry_point(SAVE_PATH_FOLDER, EntryPoints.TIMELINE_CANDS) cands, texts = cast( tuple[TimelineCandidates, dict[ObjectID, str]], lang_main.io.load_pickle(p_tl) ) @@ -56,17 +75,27 @@ PTH_RENDERED_GRAPH = lang_main.io.get_entry_point( file_ext='.svg', ) - -TABLE_FEATS: Final[list[str]] = [ +# NAME_DELTA_FEAT_TO_NEXT_FAILURE: Final[str] = 'Zeitspanne bis zum nächsten Ereignis [Tage]' +TABLE_FEATS_OVERVIEW: Final[list[str]] = [ 'ErstellungsDatum', 'ErledigungsDatum', + NAME_DELTA_FEAT_TO_REPAIR, 'VorgangsTypName', 'VorgangsBeschreibung', + 'ErledigungsBeschreibung', ] TABLE_FEATS_DATES: Final[list[str]] = [ 'ErstellungsDatum', 'ErledigungsDatum', ] +TABLE_FEATS_BEST_ACTIONS: Final[list[str]] = [ + 'ErstellungsDatum', + 'ErledigungsDatum', + 'VorgangsTypName', + 'VorgangsBeschreibung', + 'ErledigungsBeschreibung', + NAME_DELTA_FEAT_TO_NEXT_FAILURE, +] # ** figure config MARKERS_OCCURRENCES: Final[dict[str, Any]] = { @@ -86,13 +115,15 @@ HOVER_DATA: Final[dict[str, Any]] = { 'ErstellungsDatum': '|%d.%m.%Y', 'ErledigungsDatum': '|%d.%m.%Y', 'VorgangsBeschreibung': True, + 'ErledigungsBeschreibung': True, } HOVER_DATA_DELTA: Final[dict[str, Any]] = { 'ErstellungsDatum': '|%d.%m.%Y', 'ErledigungsDatum': '|%d.%m.%Y', 'VorgangsDatum': '|%d.%m.%Y', - 'delta': True, + NAME_DELTA_FEAT_TO_REPAIR: True, 'VorgangsBeschreibung': True, + 'ErledigungsBeschreibung': True, } # ** graph @@ -136,10 +167,10 @@ graph_layout = html.Div( html.Img( id='static-graph-img', alt='static rendered graph', - # style={ - # 'width': 'auto', - # 'height': 'auto', - # }, + style={ + 'width': 'auto', + 'height': 'auto', + }, ), html.P(id='info-graph-errors', children=[]), ], @@ -186,7 +217,27 @@ app.layout = html.Div( ] ), html.Div( - [dash_table.DataTable(id='table-candidates')], style={'marginBottom': '2em'} + children=[ + html.Div( + [ + html.H5('Überblick ähnlicher Vorgänge'), + dash_table.DataTable(id='table-candidates'), + ], + style={'paddingBottom': '1em'}, + ), + html.Div( + [ + html.H5( + ( + 'Maßnahmen sortiert nach längstem Zeitraum ' + 'bis zum nächsten Ereignis' + ) + ), + dash_table.DataTable(id='table-best-actions'), + ] + ), + ], + style={'marginBottom': '2em', 'padding': '2em'}, ), graph_layout, ], @@ -222,20 +273,21 @@ def update_choice_candidates(obj_id): # ** helpers to filter DataFrame -def pre_filter_data( +def filter_candidates( data: DataFrame, idx: int, obj_id: ObjectID, -) -> DataFrame: +) -> DataFrameTLFiltered: + # assert correct data type because of Dash idx = int(idx) obj_id = int(obj_id) - # data = data.copy() - cands_for_obj_id = cands[obj_id] - cands_choice = cands_for_obj_id[int(idx) - 1] - # data - data = data.loc[list(cands_choice)].sort_index() # type: ignore - data['delta'] = data['ErledigungsDatum'] - data['ErstellungsDatum'] - data['delta'] = data['delta'].dt.days + + data = filter_timeline_cands( + data=data, + cands=cands, + obj_id=obj_id, + entry_idx=(idx - 1), # idx in Dashboard starts with 1 + ) return data @@ -258,10 +310,10 @@ def update_timeline(index, obj_id): obj_text = texts[obj_id] title_occurrences = f'HObjektText: {obj_text}' title_delta = f'HObjektText: {obj_text}, Differenz Erstellung und Erledigung' - df = pre_filter_data(data, idx=index, obj_id=obj_id) + df = filter_candidates(data, idx=index, obj_id=obj_id) # figure fig_occurrences = fig_timeline_occurrences(df, title_occurrences) - fig_delta = fig_timeline_delta(df, title_delta) + fig_delta = fig_timeline_delta(df, title_delta, delta_feature=NAME_DELTA_FEAT_TO_REPAIR) return fig_occurrences, fig_delta @@ -293,11 +345,12 @@ def fig_timeline_occurrences( def fig_timeline_delta( df: DataFrame, title: str, + delta_feature: str, ) -> Figure: fig = px.scatter( data_frame=df, x='ErstellungsDatum', - y='delta', + y=delta_feature, title=title, hover_data=HOVER_DATA_DELTA, ) @@ -309,25 +362,77 @@ def fig_timeline_delta( return fig +def transform_to_HTML_table( + data: DataFrame, + target_features: Collection[str], + date_cols: Iterable[str] | None = None, + sorting_feature: str | None = None, + sorting_ascending: bool = True, +) -> tuple[HTMLColumns, HTMLTable]: + target_features = list(target_features) + data = data.copy() + data = data.filter(items=target_features, axis=1) + + if sorting_feature is not None: + data = data.sort_values(by='ErstellungsDatum', ascending=sorting_ascending) + + if date_cols is not None: + for col in date_cols: + data[col] = data[col].dt.strftime(r'%Y-%m-%d') + + columns = [{'name': col, 'id': col} for col in data.columns] + table_data = data.to_dict('records') + + return columns, table_data + + +# 'table-best-actions' # ** HTML table @callback( - [Output('table-candidates', 'data'), Output('table-candidates', 'columns')], + [ + Output('table-candidates', 'columns'), + Output('table-candidates', 'data'), + Output('table-best-actions', 'columns'), + Output('table-best-actions', 'data'), + ], Input('selector-candidates', 'value'), State('selector-obj_id', 'value'), prevent_initial_call=True, ) -def update_table_candidates(index, obj_id): - df = pre_filter_data(data, idx=index, obj_id=obj_id) - df = df.filter(items=TABLE_FEATS, axis=1).sort_values( - by='ErstellungsDatum', ascending=True +def update_tables_candidates( + index, + obj_id, +) -> tuple[HTMLColumns, HTMLTable, HTMLColumns, HTMLTable]: + cands = filter_candidates(data, idx=index, obj_id=obj_id) + overview_cols, overview_table = transform_to_HTML_table( + data=cands, + target_features=TABLE_FEATS_OVERVIEW, + date_cols=TABLE_FEATS_DATES, + sorting_feature='ErstellungsDatum', + sorting_ascending=True, ) - cols = [{'name': i, 'id': i} for i in df.columns] - # convert dates to strings - for col in TABLE_FEATS_DATES: - df[col] = df[col].dt.strftime(r'%Y-%m-%d') + # df = df.filter(items=TABLE_FEATS_OVERVIEW, axis=1).sort_values( + # by='ErstellungsDatum', ascending=True + # ) + # cols = [{'name': i, 'id': i} for i in df.columns] + # # convert dates to strings + # for col in TABLE_FEATS_DATES: + # df[col] = df[col].dt.strftime(r'%Y-%m-%d') - table_data = df.to_dict('records') - return table_data, cols + # table_data = df.to_dict('records') + + cands_best_actions = calc_delta_to_next_failure( + data=cands, + date_feature='ErstellungsDatum', + name_delta_feature=NAME_DELTA_FEAT_TO_NEXT_FAILURE, + ) + best_actions_cols, best_actions_table = transform_to_HTML_table( + data=cands_best_actions, + target_features=TABLE_FEATS_BEST_ACTIONS, + date_cols=TABLE_FEATS_DATES, + ) + + return overview_cols, overview_table, best_actions_cols, best_actions_table # ** graph callbacks @@ -345,7 +450,7 @@ def update_table_candidates(index, obj_id): def display_candidates_as_graph(index, obj_id): error_msg = '' t1 = time.perf_counter() - df = pre_filter_data(data, idx=index, obj_id=obj_id) + df = filter_candidates(data, idx=index, obj_id=obj_id) t2 = time.perf_counter() print(f'Time for filtering: {t2 - t1} s') diff --git a/src/lang_main/analysis/preprocessing.py b/src/lang_main/analysis/preprocessing.py index 54a9f93..9130bb1 100644 --- a/src/lang_main/analysis/preprocessing.py +++ b/src/lang_main/analysis/preprocessing.py @@ -1,9 +1,8 @@ -import re -from collections.abc import Iterable +from collections.abc import Collection from itertools import combinations from math import factorial from pathlib import Path -from typing import Callable, cast +from typing import cast import numpy as np import pandas as pd @@ -25,11 +24,12 @@ from lang_main.loggers import logger_preprocess as logger from lang_main.pipelines.base import Pipeline from lang_main.types import Embedding, PandasIndex -# ** RE patterns -pattern_special_chars = re.compile(r'[\t\n\r\f\v]+') -pattern_repeated_chars = re.compile(r'([,;.:!?-_\+]){2,}') -pattern_dates = re.compile(r'(\d{1,2}\.)?(\d{1,2}\.)([\d]{2,4})?') -pattern_whitespace = re.compile(r'[ ]{2,}') +# TODO removal +# pattern_escape_seq = re.compile(r'[\t\n\r\f\v]+') +# pattern_escape_seq_sentences = re.compile(r' *[\t\n\r\f\v]+') +# pattern_repeated_chars = re.compile(r'([,;.:!?-_\+]){2,}') +# pattern_dates = re.compile(r'(\d{1,2}\.)?(\d{1,2}\.)([\d]{2,4})?') +# pattern_whitespace = re.compile(r'[ ]{2,}') # ** (1) dataset preparation: loading and simple preprocessing @@ -37,7 +37,7 @@ pattern_whitespace = re.compile(r'[ ]{2,}') # duplicate cleansing based on all properties def load_raw_data( path: Path, - date_cols: Iterable[str] = ( + date_cols: Collection[str] = ( 'VorgangsDatum', 'ErledigungsDatum', 'Arbeitsbeginn', @@ -50,7 +50,7 @@ def load_raw_data( ---------- path : str path to dataset file, usually CSV file - date_cols : list[str], optional + date_cols : Collection[str], optional columns which contain dates and are parsed as such, by default ( 'VorgangsDatum', @@ -129,9 +129,7 @@ def remove_duplicates( def remove_NA( data: DataFrame, - target_features: list[str] = [ - 'VorgangsBeschreibung', - ], + target_features: Collection[str] = ('VorgangsBeschreibung',), ) -> tuple[DataFrame]: """function to drop NA entries based on a subset of features to be analysed @@ -139,14 +137,15 @@ def remove_NA( ---------- data : DataFrame standard IHM dataset, perhaps pre-cleaned - target_features : list[str], optional - subset to analyse to define an NA entry, by default [ 'VorgangsBeschreibung', ] + target_features : Collection[str], optional + subset to analyse to define an NA entry, by default ('VorgangsBeschreibung',) Returns ------- DataFrame dataset with removed NA entries for given subset of features """ + target_features = list(target_features) wo_NA = data.dropna(axis=0, subset=target_features, ignore_index=True).copy() # type: ignore logger.info( f'Removed NA entries for features >>{target_features}<< from dataset successfully.' @@ -156,46 +155,7 @@ def remove_NA( # ** (2) entry-based cleansing -# following functions clean and prepare specific entries, not whole dataset -def clean_string_slim(string: str) -> str: - """mapping function to clean single string entries in a series (feature-wise) - of the dataset, used to be applied element-wise for string features - - Parameters - ---------- - string : str - dataset entry feature - - Returns - ------- - str - cleaned entry - """ - # remove special chars - string = pattern_special_chars.sub(' ', string) - string = pattern_repeated_chars.sub(r'\1', string) - # string = pattern_dates.sub('', string) - # dates are used for context, should not be removed at this stage - string = pattern_whitespace.sub(' ', string) - # remove whitespaces at the beginning and the end - string = string.strip() - - return string - - -def entry_wise_cleansing( - data: DataFrame, - target_feature: str, - cleansing_func: Callable[[str], str], -) -> tuple[DataFrame]: - # apply given cleansing function to target feature - data[target_feature] = data[target_feature].map(cleansing_func) - logger.info( - ('Successfully applied entry-wise cleansing procedure >>%s<< for feature >>%s<<'), - cleansing_func.__name__, - target_feature, - ) - return (data,) +# ** moved to module ``lang_main.analysis.shared`` # ** in-depth analysis of one feature diff --git a/src/lang_main/analysis/shared.py b/src/lang_main/analysis/shared.py index c177acd..dd66c95 100644 --- a/src/lang_main/analysis/shared.py +++ b/src/lang_main/analysis/shared.py @@ -1,4 +1,5 @@ -from collections.abc import Iterable, Iterator +import re +from collections.abc import Callable, Collection, Iterable, Iterator from typing import cast import networkx as nx @@ -7,14 +8,70 @@ import numpy.typing as npt import sentence_transformers import sentence_transformers.util from networkx import Graph -from pandas import Series +from pandas import DataFrame, Series from sentence_transformers import SentenceTransformer from torch import Tensor from lang_main.analysis.graphs import get_graph_metadata, update_graph +from lang_main.loggers import logger_preprocess as logger from lang_main.types import PandasIndex +# ** RE patterns +pattern_escape_newline = re.compile(r'[\n]+') +pattern_escape_seq = re.compile(r'[\t\n\r\f\v]+') +pattern_escape_seq_sentences = re.compile(r' *[\t\n\r\f\v]+') +pattern_repeated_chars = re.compile(r'[,;.:!?\-_+]+(?=[,;.:!?\-_+])') +pattern_dates = re.compile(r'(\d{1,2}\.)?(\d{1,2}\.)([\d]{2,4})?') +pattern_whitespace = re.compile(r'[ ]{2,}') + +# ** RE applications +# following functions clean and prepare specific entries, not whole datasets +def clean_string_slim(string: str) -> str: + """mapping function to clean single string entries in a series (feature-wise) + of the dataset, used to be applied element-wise for string features + + Parameters + ---------- + string : str + dataset entry feature + + Returns + ------- + str + cleaned entry + """ + # remove special chars + string = pattern_escape_newline.sub('. ', string) + string = pattern_escape_seq.sub(' ', string) + string = pattern_repeated_chars.sub('', string) + # string = pattern_dates.sub('', string) + # dates are used for context, should not be removed at this stage + string = pattern_whitespace.sub(' ', string) + # remove whitespaces at the beginning and the end + string = string.strip() + + return string + + +# ** dataset cleansing +def entry_wise_cleansing( + data: DataFrame, + target_features: Collection[str], + cleansing_func: Callable[[str], str] = clean_string_slim, +) -> tuple[DataFrame]: + # apply given cleansing function to target feature + target_features = list(target_features) + data[target_features] = data[target_features].map(cleansing_func) + logger.info( + ('Successfully applied entry-wise cleansing procedure >>%s<< for features >>%s<<'), + cleansing_func.__name__, + target_features, + ) + return (data,) + + +# ** similarities def candidates_by_index( data_model_input: Series, model: SentenceTransformer, diff --git a/src/lang_main/analysis/timeline.py b/src/lang_main/analysis/timeline.py index e010ff2..4e339a0 100644 --- a/src/lang_main/analysis/timeline.py +++ b/src/lang_main/analysis/timeline.py @@ -1,4 +1,4 @@ -from collections.abc import Iterable, Iterator +from collections.abc import Collection, Iterable, Iterator from typing import cast from pandas import DataFrame, Series @@ -7,14 +7,21 @@ from tqdm.auto import tqdm # TODO: check deletion from lang_main.analysis.shared import ( candidates_by_index, + entry_wise_cleansing, + pattern_escape_seq_sentences, similar_index_connection_graph, similar_index_groups, ) from lang_main.loggers import logger_timeline as logger -from lang_main.types import ObjectID, PandasIndex, TimelineCandidates +from lang_main.types import ( + DataFrameTLFiltered, + ObjectID, + PandasIndex, + TimelineCandidates, +) -def non_relevant_obj_ids( +def _non_relevant_obj_ids( data: DataFrame, thresh_unique_feat_per_id: int, *, @@ -50,9 +57,9 @@ def remove_non_relevant_obj_ids( feature_uniqueness: str = 'HObjektText', feature_obj_id: str = 'ObjektID', ) -> tuple[DataFrame]: - logger.info('Removing non-relevant ObjectIDs from dataset') + logger.info('Removing non-relevant ObjectIDs from dataset...') data = data.copy() - ids_to_ignore = non_relevant_obj_ids( + ids_to_ignore = _non_relevant_obj_ids( data=data, thresh_unique_feat_per_id=thresh_unique_feat_per_id, feature_uniqueness=feature_uniqueness, @@ -61,7 +68,43 @@ def remove_non_relevant_obj_ids( # only retain entries with ObjectIDs not in IDs to ignore data = data.loc[~(data[feature_obj_id].isin(ids_to_ignore))] logger.debug('Ignored ObjectIDs: %s', ids_to_ignore) - logger.info('Non-relevant ObjectIDs removed successfully') + logger.info('Non-relevant ObjectIDs removed successfully.') + + return (data,) + + +def cleanup_descriptions( + data: DataFrame, + properties: Collection[str] = ( + 'VorgangsBeschreibung', + 'ErledigungsBeschreibung', + ), +) -> tuple[DataFrame]: + logger.info('Cleaning necessary descriptions...') + data = data.copy() + features = list(properties) + data[features] = data[features].fillna('N.V.') + (data,) = entry_wise_cleansing(data, target_features=features) + logger.info('Cleansing successful.') + + return (data.copy(),) + + +def calc_delta_to_repair( + data: DataFrame, + date_feature_start: str = 'ErstellungsDatum', + date_feature_end: str = 'ErledigungsDatum', + name_delta_feature: str = 'delta_to_repair', + convert_to_days: bool = True, +) -> tuple[DataFrame]: + logger.info('Calculating time differences between start and end of operations...') + data = data.copy() + data[name_delta_feature] = data[date_feature_end] - data[date_feature_start] + + if convert_to_days: + data[name_delta_feature] = data[name_delta_feature].dt.days + + logger.info('Calculation successful.') return (data,) @@ -75,7 +118,7 @@ def generate_model_input( 'VorgangsBeschreibung', ), ) -> tuple[DataFrame]: - logger.info('Generating concatenation of model input features') + logger.info('Generating concatenation of model input features...') data = data.copy() model_input_features = list(model_input_features) input_features = data[model_input_features].fillna('').astype(str) @@ -83,7 +126,7 @@ def generate_model_input( lambda x: ' - '.join(x), axis=1, ) - logger.info('Model input generated successfully') + logger.info('Model input generated successfully.') return (data,) @@ -97,7 +140,7 @@ def filter_activities_per_obj_id( ) -> tuple[DataFrame, Series]: data = data.copy() # filter only relevant activities count occurrences for each ObjectID - logger.info('Filtering activities per ObjectID') + logger.info('Filtering activities per ObjectID...') filt_rel_activities = data[activity_feature].isin(relevant_activity_types) data_filter_activities = data.loc[filt_rel_activities].copy() num_activities_per_obj_id = cast( @@ -113,7 +156,7 @@ def filter_activities_per_obj_id( num_activities_per_obj_id = num_activities_per_obj_id.loc[~filt_below_thresh] data_filter_activities = data_filter_activities.loc[~filt_entries_below_thresh] - logger.info('Activities per ObjectID filtered successfully') + logger.info('Activities per ObjectID filtered successfully.') return data_filter_activities, num_activities_per_obj_id @@ -129,7 +172,7 @@ def filter_activities_per_obj_id( ## use idx pairs to get idx values of series -def get_timeline_candidates_index( +def _get_timeline_candidates_index( data: DataFrame, num_activities_per_obj_id: Series, *, @@ -161,7 +204,7 @@ def get_timeline_candidates_index( # TODO: check application for duplicate removal -def transform_timeline_candidates( +def _transform_timeline_candidates( candidates: Iterator[tuple[ObjectID, tuple[PandasIndex, ...]]], ) -> TimelineCandidates: """function to build a mapping of ObjectIDs to their respective collection of @@ -200,7 +243,7 @@ def transform_timeline_candidates( return candidates_by_obj_id -def map_obj_id_to_texts( +def _map_obj_id_to_texts( data: DataFrame, feature_obj_id: str = 'ObjektID', ) -> dict[ObjectID, str]: @@ -229,7 +272,7 @@ def get_timeline_candidates( model_input_feature: str = 'nlp_model_input', ) -> tuple[TimelineCandidates, dict[ObjectID, str]]: logger.info('Obtaining timeline candidates...') - candidates = get_timeline_candidates_index( + candidates = _get_timeline_candidates_index( data=data, num_activities_per_obj_id=num_activities_per_obj_id, model=model, @@ -237,14 +280,52 @@ def get_timeline_candidates( feature_obj_id=feature_obj_id, model_input_feature=model_input_feature, ) - tl_candidates = transform_timeline_candidates(candidates) + tl_candidates = _transform_timeline_candidates(candidates) logger.info('Timeline candidates obtained successfully.') # text mapping to obtain object descriptors logger.info('Mapping ObjectIDs to their respective text descriptor...') - map_obj_text = map_obj_id_to_texts( + map_obj_text = _map_obj_id_to_texts( data=data, feature_obj_id=feature_obj_id, ) logger.info('ObjectIDs successfully mapped to text descriptors.') return tl_candidates, map_obj_text + + +# ** Postprocessing +# filter original dataset for a batch of timeline candidates +def filter_timeline_cands( + data: DataFrame, + cands: TimelineCandidates, + obj_id: ObjectID, + entry_idx: int, + sort_feature: str = 'ErstellungsDatum', +) -> DataFrameTLFiltered: + data = data.copy() + cands_for_obj_id = cands[obj_id] + cands_choice = cands_for_obj_id[entry_idx] + data = data.loc[list(cands_choice)].sort_values( + by=sort_feature, + ascending=True, + ) + + return data + + +def calc_delta_to_next_failure( + data: DataFrameTLFiltered, + date_feature: str = 'ErstellungsDatum', + name_delta_feature: str = 'delta_to_next_failure', + convert_to_days: bool = True, +) -> DataFrameTLFiltered: + data = data.copy() + last_val = data[date_feature].iat[-1] + shifted = data[date_feature].shift(-1, fill_value=last_val) + data[name_delta_feature] = shifted - data[date_feature] + data = data.sort_values(by=name_delta_feature, ascending=False) + + if convert_to_days: + data[name_delta_feature] = data[name_delta_feature].dt.days + + return data diff --git a/src/lang_main/constants.py b/src/lang_main/constants.py index 2fda715..9d0e52b 100644 --- a/src/lang_main/constants.py +++ b/src/lang_main/constants.py @@ -76,13 +76,14 @@ CYTO_LAYOUT_PROPERTIES: Final[CytoLayoutProperties] = { 'isDeterministic': True, 'singlePartition': False, } +CYTO_SANDBOX_NAME: Final[str] = 'lang_main' CYTO_STYLESHEET_NAME: Final[str] = 'lang_main' # name for property, on which selection is done CYTO_SELECTION_PROPERTY: Final[str] = 'node_selection' CYTO_NUMBER_SUBGRAPHS: Final[int] = 5 CYTO_ITER_NEIGHBOUR_DEPTH: Final[int] = 2 -# ** time analysis.uniqueness +# ** time_analysis.uniqueness THRESHOLD_UNIQUE_TEXTS: Final[int] = CONFIG['time_analysis']['uniqueness'][ 'threshold_unique_texts' ] @@ -90,6 +91,10 @@ UNIQUE_CRITERION_FEATURE: Final[str] = CONFIG['time_analysis']['uniqueness'][ 'criterion_feature' ] FEATURE_NAME_OBJ_ID: Final[str] = CONFIG['time_analysis']['uniqueness']['feature_name_obj_id'] +# ** time_analysis.preparation +NAME_DELTA_FEAT_TO_REPAIR: Final[str] = 'delta_to_repair' +# NAME_DELTA_FEAT_TO_REPAIR: Final[str] = 'Zeitspanne bis zur Behebung [Tage]' +NAME_DELTA_FEAT_TO_NEXT_FAILURE: Final[str] = 'Zeitspanne bis zum nächsten Ereignis [Tage]' # ** time_analysis.model_input MODEL_INPUT_FEATURES: Final[tuple[str, ...]] = tuple( CONFIG['time_analysis']['model_input']['input_features'] diff --git a/src/lang_main/cytoscape_config/template_test.cys b/src/lang_main/cytoscape_config/template_test.cys index da070f2..d245d1e 100644 Binary files a/src/lang_main/cytoscape_config/template_test.cys and b/src/lang_main/cytoscape_config/template_test.cys differ diff --git a/src/lang_main/pipelines/predefined.py b/src/lang_main/pipelines/predefined.py index 0951c06..f4d404f 100644 --- a/src/lang_main/pipelines/predefined.py +++ b/src/lang_main/pipelines/predefined.py @@ -3,15 +3,19 @@ from pathlib import Path from lang_main.analysis import graphs from lang_main.analysis.preprocessing import ( analyse_feature, - clean_string_slim, - entry_wise_cleansing, load_raw_data, merge_similarity_dupl, numeric_pre_filter_feature, remove_duplicates, remove_NA, ) +from lang_main.analysis.shared import ( + clean_string_slim, + entry_wise_cleansing, +) from lang_main.analysis.timeline import ( + calc_delta_to_repair, + cleanup_descriptions, filter_activities_per_obj_id, generate_model_input, get_timeline_candidates, @@ -25,6 +29,7 @@ from lang_main.constants import ( DATE_COLS, FEATURE_NAME_OBJ_ID, MODEL_INPUT_FEATURES, + NAME_DELTA_FEAT_TO_REPAIR, SAVE_PATH_FOLDER, SPCY_MODEL, STFR_MODEL, @@ -56,7 +61,7 @@ def build_base_target_feature_pipe() -> Pipeline: pipe_target_feat.add( entry_wise_cleansing, { - 'target_feature': 'VorgangsBeschreibung', + 'target_feature': ('VorgangsBeschreibung',), 'cleansing_func': clean_string_slim, }, save_result=True, @@ -182,7 +187,6 @@ def build_tk_graph_rescaling_pipe( graphs.pipe_add_graph_metrics, save_result=save_result, filename=exit_point, - # filename=EntryPoints.TK_GRAPH_ANALYSIS_RESCALED, ) return pipe_graph_rescaling @@ -247,6 +251,23 @@ def build_tk_graph_render_pipe( # ** timeline analysis def build_timeline_pipe() -> Pipeline: pipe_timeline = Pipeline(name='Timeline_Analysis', working_dir=SAVE_PATH_FOLDER) + pipe_timeline.add( + cleanup_descriptions, + { + 'properties': ['ErledigungsBeschreibung'], + }, + ) + pipe_timeline.add( + calc_delta_to_repair, + { + 'date_feature_start': 'ErstellungsDatum', + 'date_feature_end': 'ErledigungsDatum', + 'name_delta_feature': NAME_DELTA_FEAT_TO_REPAIR, + 'convert_to_days': True, + }, + save_result=True, + filename=EntryPoints.TIMELINE_POST, + ) pipe_timeline.add( remove_non_relevant_obj_ids, { @@ -281,7 +302,7 @@ def build_timeline_pipe() -> Pipeline: 'model_input_feature': 'nlp_model_input', }, save_result=True, - filename=EntryPoints.TIMELINE_POST, + filename=EntryPoints.TIMELINE_CANDS, ) return pipe_timeline diff --git a/src/lang_main/render/cytoscape.py b/src/lang_main/render/cytoscape.py index 4df2a0d..d5201a9 100644 --- a/src/lang_main/render/cytoscape.py +++ b/src/lang_main/render/cytoscape.py @@ -16,6 +16,7 @@ from lang_main.constants import ( CYTO_LAYOUT_PROPERTIES, CYTO_NUMBER_SUBGRAPHS, CYTO_PATH_STYLESHEET, + CYTO_SANDBOX_NAME, CYTO_SELECTION_PROPERTY, CYTO_STYLESHEET_NAME, PROPERTY_NAME_DEGREE_WEIGHTED, @@ -56,6 +57,8 @@ def verify_connection(): def import_to_cytoscape( graph: DiGraph | Graph, network_name: str = CYTO_BASE_NETWORK_NAME, + sandbox_name: str = CYTO_SANDBOX_NAME, + reinitialise_sandbox: bool = True, ) -> None: """Cytoscape: import NetworkX graph as new network collection @@ -66,6 +69,12 @@ def import_to_cytoscape( """ logger.debug('Checking Cytoscape connection...') verify_connection() + logger.debug('Setting Cytoscape sandbox...') + p4c.sandbox_set( + sandbox_name=sandbox_name, + reinitialize=reinitialise_sandbox, + copy_samples=False, + ) logger.debug('Importing to and analysing network in Cytoscape...') p4c.delete_all_networks() p4c.create_network_from_networkx( @@ -122,6 +131,7 @@ def export_network_to_image( filetype: CytoExportFileTypes = 'SVG', network_name: str = CYTO_BASE_NETWORK_NAME, pdf_export_page_size: CytoExportPageSizes = 'A4', + sandbox_name: str = CYTO_SANDBOX_NAME, ) -> None: """Cytoscape: export current selected view as image @@ -140,14 +150,17 @@ def export_network_to_image( logger.debug('Exporting image to file...') if not target_folder.exists(): target_folder.mkdir(parents=True) - file_pth = target_folder / filename + dst_file_pth = (target_folder / filename).with_suffix(f'.{filetype.lower()}') text_as_font = True if filetype == 'SVG': text_as_font = False + # image is generated in sandbox directory and transferred to target destination + # (preparation for remote instances of Cytoscape) + # TODO close non-necessary windows before image display p4c.export_image( - filename=str(file_pth), + filename=filename, type=filetype, network=network_name, overwrite_file=True, @@ -155,7 +168,24 @@ def export_network_to_image( export_text_as_font=text_as_font, page_size=pdf_export_page_size, ) - logger.debug('Exporting image to file successful.') + # TODO change back to Cytoscape 3.10 and above + # TODO remove if Cytoscape >= 3.10.* is running in container + # p4c.export_image( + # filename=filename, + # type=filetype, + # network=network_name, + # overwrite_file=True, + # ) + logger.debug('Exported image to sandbox.') + logger.debug('Transferring image from sandbox to target destination...') + sandbox_filename = f'{filename}.{filetype.lower()}' + p4c.sandbox_get_from( + source_file=sandbox_filename, + dest_file=str(dst_file_pth), + overwrite=True, + sandbox_name=sandbox_name, + ) + logger.debug('Transfer of image from sandbox to target destination successful.') def layout_network( @@ -192,6 +222,7 @@ def apply_style_to_network( node_size_property: str = 'node_selection', min_node_size: int = 15, max_node_size: int = 40, + sandbox_name: str = CYTO_SANDBOX_NAME, ) -> None: """Cytoscape: apply a chosen Cytoscape style to the defined network @@ -221,7 +252,16 @@ def apply_style_to_network( raise FileNotFoundError( f'Visual stylesheet for Cytoscape not found under: >>{pth_to_stylesheet}<<' ) - p4c.import_visual_styles(str(pth_to_stylesheet)) + # send to sandbox + sandbox_filename = pth_to_stylesheet.name + p4c.sandbox_send_to( + source_file=pth_to_stylesheet, + dest_file=sandbox_filename, + overwrite=True, + sandbox_name=sandbox_name, + ) + # load stylesheet + p4c.import_visual_styles(sandbox_filename) p4c.set_visual_style(style_name, network=network_name) # node size mapping, only if needed property is available @@ -242,6 +282,7 @@ def apply_style_to_network( default_number=min_node_size, ) p4c.set_node_size_mapping(**node_size_map) + # TODO removal # else: # node_table = p4c.get_table_columns(table='node', network=network_name) # nodes_SUID = node_table['SUID'].to_list() diff --git a/src/lang_main/types.py b/src/lang_main/types.py index 1d6ebec..3e7f21b 100644 --- a/src/lang_main/types.py +++ b/src/lang_main/types.py @@ -1,5 +1,7 @@ import enum +from collections.abc import Hashable from typing import ( + Any, Literal, Required, TypeAlias, @@ -7,6 +9,7 @@ from typing import ( ) import numpy as np +from pandas import DataFrame from spacy.tokens.doc import Doc as SpacyDoc from torch import Tensor @@ -33,6 +36,7 @@ ResultHandling: TypeAlias = list[tuple[bool, str | None]] class EntryPoints(enum.StrEnum): TIMELINE = 'TIMELINE' TIMELINE_POST = 'TIMELINE_POSTPROCESSING' + TIMELINE_CANDS = 'TIMELINE_CANDIDATES' TIMELINE_TK_GRAPH_RESCALED = 'TIMELINE_TK_GRAPH_RESCALED' TK_GRAPH_POST = 'TK-GRAPH_POSTPROCESSING' TK_GRAPH_ANALYSIS = 'TK-GRAPH_ANALYSIS' @@ -44,6 +48,7 @@ class EntryPoints(enum.StrEnum): PandasIndex: TypeAlias = int | np.int64 ObjectID: TypeAlias = int Embedding: TypeAlias = SpacyDoc | Tensor +DataFrameTLFiltered: TypeAlias = DataFrame # ** graphs NodeTitle: TypeAlias = str @@ -118,3 +123,8 @@ class CytoscapeData(TypedDict, total=False): # ** timeline TimelineCandidates: TypeAlias = dict[ObjectID, tuple[tuple[PandasIndex, ...], ...]] + + +# ** Dash (Dashboard) +HTMLTable: TypeAlias = list[dict[Hashable, Any]] +HTMLColumns: TypeAlias = list[dict[str, str]] diff --git a/test-notebooks/misc.ipynb b/test-notebooks/misc.ipynb index 5fa845c..7d0193d 100644 --- a/test-notebooks/misc.ipynb +++ b/test-notebooks/misc.ipynb @@ -14,14 +14,62 @@ { "cell_type": "code", "execution_count": 2, - "id": "af118d77-d87a-4687-be5b-e810a24c403e", + "id": "d46b6ce8-b51b-49e0-b494-fc24fda0f73f", + "metadata": {}, + "outputs": [], + "source": [ + "import py4cytoscape as p4c" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "6fde72d3-b95b-4d37-be71-a7d3661dd3f5", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "2024-07-24 06:14:08 +0000 | io:INFO | Loaded TOML config file successfully.\n" + "You are connected to Cytoscape!\n" + ] + }, + { + "data": { + "text/plain": [ + "'You are connected to Cytoscape!'" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p4c.cytoscape_ping()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "43eeb870-6f97-4029-ac0d-210315ccaabf", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "af118d77-d87a-4687-be5b-e810a24c403e", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2024-07-31 06:33:53 +0000 | io:INFO | Loaded TOML config file successfully.\n" ] }, { @@ -393,7 +441,9 @@ "cell_type": "code", "execution_count": 20, "id": "f381b25a-6149-4a2a-876c-4cbd8bb9bd04", - "metadata": {}, + "metadata": { + "scrolled": true + }, "outputs": [ { "name": "stdout", @@ -6261,8 +6311,8 @@ 1 ], "range": [ - "2019-08-25 23:47:37.7827", - "2023-07-27 00:12:22.2173" + "2019-08-26 23:25:36.9657", + "2023-07-26 00:34:23.0343" ], "tickformat": "%B\n%Y", "title": { @@ -6289,7 +6339,7 @@ } } }, - "image/png": "iVBORw0KGgoAAAANSUhEUgAABb8AAAFoCAYAAAB38YZnAAAAAXNSR0IArs4c6QAAIABJREFUeF7tnQmYXVWV79etuZJUZpMQpUECzaAgGMFoix1FuxVEFCVCY0uMpmMcgQidwOPRaGMieQRalBjTRLBFY7RRGwnSLUrzVCKTaHyAA0ikzQAZSCpJJTW+75zi3tzcVN1pn3PvWnv/7vfxUZWcvc9av//OHX51ap/MwMDAgPCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCHhEIIP89ihNWoEABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAIGYAPKbhQABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAALeEUB+excpDUEAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgADymzUAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAAC3hFAfnsXKQ1BAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAA8ps1AAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAt4RQH57FykNQQACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAPKbNQABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAALeEUB+excpDUEAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgADymzUAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAAC3hFAfnsXKQ1BAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAA8ps1AAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAt4RQH57FykNQQACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAPKbNQABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAALeEUB+excpDUEAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgADymzUAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAAC3hFAfnsXKQ1BAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAA8ps1AAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAt4RQH57FykNQQACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAPKbNQABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAALeEUB+excpDUEAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgADymzUAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAAC3hFAfnsXKQ1BAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAA8ps1AAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAt4RQH57FykNQQACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAPKbNQABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAALeEUB+excpDUEAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgADymzUAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAAC3hFAfnsXKQ1BAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAA8ps1AAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAt4RQH57FykNQQACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAPKbNQABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAALeEUB+excpDUEAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgADymzUAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAAC3hFAfnsXKQ1BAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAA8ps1AAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAt4RQH57FykNQQACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAPKbNQABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAALeEUB+excpDUEAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgADymzUAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAAC3hFAfnsXKQ1BAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAA8ps1AAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAt4RQH57FykNQQACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAPKbNQABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAALeEUB+excpDUEAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgADymzUAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAAC3hFAfnsXKQ1BAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAA8ps1AAEIQAACEIAA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", + "image/png": "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AQIECBAgQIAAAQIECDQoIOxqENtUBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC9QoIu+r1NBoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgECDAsKuBrFNRYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUK+AsKteT6MRIECAAAECBAgQIECAAAECBAgQIECAAAECBAg0KCDsahDbVAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAvUKCLvq9TQaAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAgwLCrgaxTUWAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFCvgLCrXk+jESBAgAABAgQIECBAgAABAgQIECBAgAABAgQINCgg7GoQ21QECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQL1Cgi76vU0GgECBAgQIECAAAECBAgQIECAAAECBAgQIECAQIMCwq4GsU1FgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQr4Cwq15PoxEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECDQoIOxqENtUBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC9QoIu+r1NBoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgECDAsKuBrFNRYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUK+AsKteT6MRIECAAAECBAgQINAigV+d+UM4+9r58IPv7Muq/v4TJ8M9d28ND4/d26JVKJUAAQIECBAgQIAAAQLdFhB2dXv/rZ4AAQIECBAgQIBAowJ/fePtsPfQdOWczzw1EXbuGB2onmJoddO6GxY9RhvCrnf/cSkcPPpkuHzl2rx17d89Fh49uGvRa41P/PDj62F84lg4cnDXwNZLmtCTCRAgQIAAAQIECBAg0ICAsKsBZFMQIECAAAECBAgQIPA/gRh2TU6dCLMzR8LmOzfVxtKFsGtq8kAeUP37k/9kp9Bef+udJVkKu2p7yRmIAAECBAgQIECAAIEhEhB2DdFmKIUAAQIECBAgQIDAWhdYKOxKIU5sJfj3994PTz93JmzfMhKOTx8Ocx9dn3fCaeOG9VnQM/fhv/7vtNjjR/flrQh/NPt8Nk78SNekoK3fya6qYKhYX2x1mJ7zzT1fDS/+5tXw0itns3nKp67S885duJhvcVrXrbfcHNK46fr4pLSGdLKrGHalQeLa/vLG25lPHKdqnlRL1Rypht/96W95O8d0Mi7u1ZOzz+djJ6u7tm4OUz95NishXX/q9Mu58VfuvydrC7mUE3Zr/XVvfQQIECBAgAABAgQIrKyAsGtlfY1OgAABAgQIECBAgEBBYLFhVwx9im0Nq4KnONZ7l65moVavk10xDIofqd1fef66wq4P5j7OT1iVw6lU+64H78sDuHKQVK4zXhMDpPE9D4VLVz7IQr6qsKtqrnRdDJvKc/c62VXlVxV2PTZzMg/hiuFZCubKYaAXPwECBAgQIECAAAECBJoQEHY1oWwOAgQIECBAgAABAgQygYXu2bVtdCRrzxdPdsUQK33EUOd7UyfCDycPVLY/rApr4jVP/PR0mPrugezUU/wohzF1hV3Fe2D1m6Pq1NS6G2+sXHNx7b3CrqogrfxSi2uMp+Ri4LfcsOvsa+fnndqqch+0paQvEQIECBAgQIAAAQIECAwqIOwaVM51BAgQIECAAAECBAgsWWCxJ7vKYVe5BV+xTWEsotfJpL2HpitrTNc3EXaVT23FgnqdmoqPldsA9mtjWBV2pedfvnItX3sa85NPPw3jE8dCMZzr51fVxrDYolDYteQvARcQIECAAAECBAgQILACAsKuFUA1JAECBAgQIECAAAEC1QKDhl1ptF6h12La8FVV1FTY9bk7bp93Uq0cdqXaYj2xVWD8SAHVUtoYpuuLLSCLaxR2+cokQIAAAQIECBAgQGAtCgi71uKuWhMBAgQIECBAgACBIRVYbthVXFbxxFQc95cv/H5ei72FWh/GsZoKu+Jc6b5h8c+9wq60vuLjcx9d73nPrmjw/tW5fN3x7+VgrWqNX3vwvrBzx2jOuZiwcLGnuLQxHNIvPmURIECAAAECBAgQWMMCwq41vLmWRoAAAQIECBAgQGDYBAYNu+J1f/zzm3lgVL4vVtW46Tn/vHQ1HJ8+nN+3K4Yxd2y6LQt7+oVd6frbb/tMPm86OZXaIFbdA2uh2sp1xT2a+vGzYfLbj8yrMd0fq+pkVxrj9bfeCbMzR/L7mJXDr9TS8EvbvpgFYvEj3hOtuKYUvk1OncjHSuuKjyU7YdewfTWphwABAgQIECBAgACBJCDs8logQIAAAQIECBAgQKAxgRhK9bqPVmy9t210JAtjyvfsSuHLuQsX81r37x6bd1oqBj1PP3cme7x4T6/i5+Nj27eMVAY4KQgqzl2ed/Jbj4Q3z7+b17eYsCuFSWndGzesD3t3PRBe/O2reR39aqy6B1ccs7z++Llym8fYCvGurZuzmtO9torjlS1SC8X4+W98/YFw6he/FnY19tVhIgIECBAgQIAAAQIEBhUQdg0q5zoCBAgQIECAAAECBAgMKFDVdnHAoVxGgAABAgQIECBAgACBzgsIuzr/EgBAgAABAgQIECBAgMBKCsTTX6dOvxzG9zwUblp3Q376qnx6bSVrMDYBAgQIECBAgAABAgTWsoCway3vrrURIECAAAECBAgQILDqAlUtGIttFle9QAUQIECAAAECBAgQIECg5QLCrpZvoPIJECBAgAABAgQIECBAgAABAgQIECBAgAABAl0WEHZ1efetnQABAgQIECBAgAABAgQIECBAgAABAgQIECDQcgFhV8s3UPkECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgS4LCLu6vPvWToAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBouYCwq+UbqHwCBAgQIECAAAECBAgQIECAAAECBAgQIECAQJcFhF1d3n1rJ0CAAAECBAgQIECAAAECBAgQIECAAAECBAi0XEDY1fINVD4BAgQIECBAgAABAgQIECBAgAABAgQIECBAoMsCwq4u7761EyBAgAABAgQIECBAgAABAgQIECBAgAABAgRaLiDsavkGKp8AAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0GUBYVeXd9/aCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQItFxB2tXwDlU+AAAECBAgQIECAAAECBAgQIECAAAECBAgQ6LKAsKvLu2/tBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGWCwi7Wr6ByidAgAABAgQIECBAgAABAgQIECBAgAABAgQIdFlA2NXl3bd2AgQIECBAgAABAgQIECBAgAABAgQIECBAgEDLBYRdLd9A5RMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEuiwg7Ory7ls7AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKDlAsKulm+g8gkQIECAAAECBAgQIECAAAECBAgQIECAAAECXRYQdnV5962dAAECBAgQIECAAAECBAgQIECAAAECBAgQINByAWFXyzdQ+QQIECBAgAABAgQIECBAgAABAgQIECBAgACBLgsIu7q8+9ZOgAABAgQIECBAgAABAgQIECBAgAABAgQIEGi5gLCr5RuofAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAlwX+CzBuu7ZW7epsAAAAAElFTkSuQmCC", "text/html": [ "