diff --git a/dynamics.py b/dynamics.py index 5a0992f26625e54f38fda439408747ad7997fc2d..1a13e5bb5cc251bf8d3fa387890182b58dcfd7c2 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