From 6b586dcedff87f1ca91a2fcda31fa5f530174792 Mon Sep 17 00:00:00 2001 From: Wolfgang Kastaun <wolfgang.kastaun@aei.mpg.de> Date: Sat, 14 Dec 2024 13:37:17 +0100 Subject: [PATCH] Added some static exhaustiveness checks for boundary handling enums --- lisainstrument/dynamic_delay_dask.py | 9 +++++++-- lisainstrument/dynamic_delay_numpy.py | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/lisainstrument/dynamic_delay_dask.py b/lisainstrument/dynamic_delay_dask.py index f2d59c3..fb058bd 100644 --- a/lisainstrument/dynamic_delay_dask.py +++ b/lisainstrument/dynamic_delay_dask.py @@ -10,6 +10,7 @@ from typing import Callable, Final import dask import dask.array as da import numpy as np +from typing_extensions import assert_never from lisainstrument.dynamic_delay_numpy import ( DynShiftBC, @@ -121,12 +122,14 @@ class DynamicShiftDask: case DynShiftBC.FLAT: npad_left = self.margin_left samples = da.concatenate([da.ones(npad_left) * samples[0], samples]) - case _: + case DynShiftBC.EXCEPTION: msg = ( f"DynamicShiftDask: left edge handling {self._left_bound.name} not " f"possible for given max delay {self._max_delay}." ) raise RuntimeError(msg) + case _ as unreachable: + assert_never(unreachable) if self.margin_right > 0: match self._right_bound: @@ -136,12 +139,14 @@ class DynamicShiftDask: samples = da.concatenate( [samples, da.ones(self.margin_right) * samples[-1]] ) - case _: + case DynShiftBC.EXCEPTION: msg = ( f"DynamicShiftDask: right edge handling {self._right_bound.name} not " f"possible for given min delay {self._min_delay=}." ) raise RuntimeError(msg) + case _ as unreachable: + assert_never(unreachable) chunks = shift.to_delayed() delayed_op = dask.delayed(self._op_interp) diff --git a/lisainstrument/dynamic_delay_numpy.py b/lisainstrument/dynamic_delay_numpy.py index 2a30cd9..c75e29c 100644 --- a/lisainstrument/dynamic_delay_numpy.py +++ b/lisainstrument/dynamic_delay_numpy.py @@ -12,6 +12,7 @@ from typing import Final, Protocol import numpy as np from numpy.polynomial import Polynomial +from typing_extensions import assert_never from lisainstrument.fir_filters_numpy import ( DefFilterFIR, @@ -398,12 +399,14 @@ class DynamicShiftNumpy: case DynShiftBC.FLAT: npad_left = self.margin_left samples = np.concatenate([np.ones(npad_left) * samples[0], samples]) - case _: + case DynShiftBC.EXCEPTION: msg = ( f"DynamicShiftNumpy: left edge handling {self._left_bound.name} not " f"possible for given max delay {self._max_delay}." ) raise RuntimeError(msg) + case _ as unreachable: + assert_never(unreachable) if self.margin_right > 0: match self._right_bound: @@ -413,12 +416,14 @@ class DynamicShiftNumpy: samples = np.concatenate( [samples, np.ones(self.margin_right) * samples[-1]] ) - case _: + case DynShiftBC.EXCEPTION: msg = ( f"DynamicShiftNumpy: right edge handling {self._right_bound.name} not " f"possible for given min delay {self._min_delay=}." ) raise RuntimeError(msg) + case _ as unreachable: + assert_never(unreachable) pos = 0 shift_shape = len(shift) -- GitLab