From 58ab0b50708e1d30030af9063d8c80d037a2757c Mon Sep 17 00:00:00 2001 From: "christoph.von.oy" <christoph.von.oy@rwth-aachen.de> Date: Thu, 16 May 2024 13:48:36 +0200 Subject: [PATCH] Compacted resampling code --- dynamics.py | 120 ++++++++++++++++++++-------------------------------- 1 file changed, 46 insertions(+), 74 deletions(-) diff --git a/dynamics.py b/dynamics.py index 5a0992f..1a13e5b 100644 --- a/dynamics.py +++ b/dynamics.py @@ -1395,114 +1395,86 @@ def resample( if dynamic == target_dynamic: return values elif isinstance(dynamic, TreeDynamic) and isinstance(target_dynamic, TreeDynamic): - return resample_tree(values, dynamic, target_dynamic) + if dynamic.root() != target_dynamic.root(): + raise ValueError("Both dynamics have to have the same root dynamic!") + ( + assignment, + source_start, + source_end, + target_start, + target_end, + ) = dynamic.dynamic_tree.get_assignment(dynamic, target_dynamic) + return assignment.resample( + values, source_start, source_end, target_start, target_end + ) elif isinstance(dynamic, AggregatedDynamic) and isinstance( target_dynamic, PeriodDynamic ): - return resample_aggregation_down(values, dynamic, target_dynamic) + if target_dynamic.aggregated_dynamic != dynamic: + raise ValueError( + f"The period dynamic has to be part of the aggregated dynamic!" + ) + offset = dynamic.offset(target_dynamic.period_index) + return values[:, offset[0] : offset[1]] else: raise ValueError( f"Invalid dynamic type combination {type(dynamic)} -> {type(target_dynamic)}!" ) -def resample_tree( - values, dynamic: TreeDynamic, target_dynamic: TreeDynamic -): # values: type hinting a np-array, type hinting a np-array - if dynamic.root() != target_dynamic.root(): - raise ValueError("Both dynamics have to have the same root dynamic!") - ( - assignment, - source_start, - source_end, - target_start, - target_end, - ) = dynamic.dynamic_tree.get_assignment(dynamic, target_dynamic) - return assignment.resample( - values, source_start, source_end, target_start, target_end - ) - - -def resample_aggregation_down( - values, dynamic: AggregatedDynamic, target_dynamic: PeriodDynamic -): # values: type hinting a np-array, type hinting a np-array - if target_dynamic.aggregated_dynamic != dynamic: - raise ValueError( - f"The period dynamic has to be part of the aggregated dynamic!" - ) - offset = dynamic.offset(target_dynamic.period_index) - return values[:, offset[0] : offset[1]] - - def resample_into( values, dynamic: Dynamic, target_values, target_dynamic: Dynamic ): # values: type hinting a np-array, target_values: type hinting a np-array if dynamic == target_dynamic: target_values[:] = values elif isinstance(dynamic, TreeDynamic) and isinstance(target_dynamic, TreeDynamic): - resample_into_tree(values, dynamic, target_values, target_dynamic) + if dynamic.root() != target_dynamic.root(): + raise ValueError("Both dynamics have to have the same root dynamic!") + ( + assignment, + source_start, + source_end, + target_start, + target_end, + ) = dynamic.dynamic_tree.get_assignment(dynamic, target_dynamic) + assignment.resample_into( + values, source_start, source_end, target_values, target_start, target_end + ) elif isinstance(dynamic, PeriodDynamic) and isinstance( target_dynamic, AggregatedDynamic ): - resample_aggregation_up(values, dynamic, target_values, target_dynamic) + if dynamic.aggregated_dynamic != target_dynamic: + raise ValueError( + f"The period dynamic has to be part of the aggregated dynamic!" + ) + offset = target_dynamic.offset(dynamic.period_index) + target_values[:, offset[0] : offset[1]] = values else: raise ValueError( f"Invalid dynamic type combination {type(dynamic)} -> {type(target_dynamic)}!" ) -def resample_into_tree( - values, dynamic: TreeDynamic, target_values, target_dynamic: TreeDynamic -): # values: type hinting a np-array, target_values: type hinting a np-array - if dynamic.root() != target_dynamic.root(): - raise ValueError("Both dynamics have to have the same root dynamic!") - ( - assignment, - source_start, - source_end, - target_start, - target_end, - ) = dynamic.dynamic_tree.get_assignment(dynamic, target_dynamic) - assignment.resample_into( - values, source_start, source_end, target_values, target_start, target_end - ) - - -def resample_aggregation_up( - values, dynamic: PeriodDynamic, target_values, target_dynamic: AggregatedDynamic -): # values: type hinting a np-array, target_values: type hinting a np-array - if dynamic.aggregated_dynamic != target_dynamic: - raise ValueError( - f"The period dynamic has to be part of the aggregated dynamic!" - ) - offset = target_dynamic.offset(dynamic.period_index) - target_values[:, offset[0] : offset[1]] = values - - def resample_variable(variable, dynamic: Dynamic, target_dynamic: Dynamic): if dynamic == target_dynamic: return variable elif isinstance(dynamic, TreeDynamic) and isinstance(target_dynamic, TreeDynamic): - return resample_variable_tree(variable, dynamic, target_dynamic) + ( + assignment, + source_start, + source_end, + target_start, + target_end, + ) = dynamic.dynamic_tree.get_assignment(dynamic, target_dynamic) + return assignment.resample_variable( + variable, source_start, source_end, target_start, target_end + ) else: raise ValueError( f"Invalid dynamic type combination {type(dynamic)} -> {type(target_dynamic)}!" ) -def resample_variable_tree(variable, dynamic: TreeDynamic, target_dynamic: TreeDynamic): - ( - assignment, - source_start, - source_end, - target_start, - target_end, - ) = dynamic.dynamic_tree.get_assignment(dynamic, target_dynamic) - return assignment.resample_variable( - variable, source_start, source_end, target_start, target_end - ) - - class Profile: def __init__(self, values, dynamic: Dynamic): # values: type hinting np-array self.values = values -- GitLab