From 2722d327de3f99c11ca1669099f7a743ab264475 Mon Sep 17 00:00:00 2001 From: Ken Kehoe Date: Wed, 3 Jul 2024 07:26:54 -0600 Subject: [PATCH] Add nan integer (#842) * Checking data type befor adding in NaN since will need the data type to be float. Upconverting if data is type integer. * Testing for upconverting data in add_in_nan() when data is not type float. * PEP8 for Black Linting. --- act/utils/data_utils.py | 6 ++++ .../baseline/test_add_nan_line_integer.png | Bin 0 -> 42376 bytes tests/plotting/test_timeseriesdisplay.py | 28 ++++++++++++++++++ 3 files changed, 34 insertions(+) create mode 100644 tests/plotting/baseline/test_add_nan_line_integer.png diff --git a/act/utils/data_utils.py b/act/utils/data_utils.py index 17682c6187..cebb7a5fea 100644 --- a/act/utils/data_utils.py +++ b/act/utils/data_utils.py @@ -455,8 +455,14 @@ def add_in_nan(time, data): mode = stats.mode(diff, keepdims=True).mode[0] except TypeError: mode = stats.mode(diff).mode[0] + index = np.where(diff > (2.0 * mode)) + # If the data is not float time and we try to insert a NaN it will + # not auto upconvert the data. Need to convert before inserting NaN. + if len(index) > 0 and np.issubdtype(data.dtype, np.integer): + data = data.astype('float32') + offset = 0 for i in index[0]: corr_i = i + offset diff --git a/tests/plotting/baseline/test_add_nan_line_integer.png b/tests/plotting/baseline/test_add_nan_line_integer.png new file mode 100644 index 0000000000000000000000000000000000000000..be7bda4d31aa7e90994eedc0a551ae2f63303fb6 GIT binary patch literal 42376 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 literal 0 HcmV?d00001 diff --git a/tests/plotting/test_timeseriesdisplay.py b/tests/plotting/test_timeseriesdisplay.py index 9c237b7001..d1461b3779 100644 --- a/tests/plotting/test_timeseriesdisplay.py +++ b/tests/plotting/test_timeseriesdisplay.py @@ -606,6 +606,34 @@ def test_add_nan_line(): matplotlib.pyplot.close(display.fig) +@pytest.mark.mpl_image_compare(tolerance=10) +def test_add_nan_line_integer(): + data = np.arange(100, dtype=np.int32) + time = np.array('2019-11-01T00:00:00', dtype='datetime64[m]') + np.arange(data.size) + time = time.astype('datetime64[ns]') # Only done to stop a warning appearing + + # Remove data to produce a gap + data = np.delete(data, np.arange(50, 60), axis=0) + time = np.delete(time, np.arange(50, 60), axis=0) + data = np.delete(data, np.arange(70, 75), axis=0) + time = np.delete(time, np.arange(70, 75), axis=0) + + ds = xr.Dataset( + data_vars={'data': ('time', data, {'long_name': 'Data values', 'units': 'degC'})}, + coords={'time': ('time', time, {'long_name': 'Time in UTC'})}, + ) + + display = TimeSeriesDisplay({'test_datastream': ds}, figsize=(15, 10), subplot_shape=(1,)) + display.plot('data', subplot_index=(0,), add_nan=True, marker='.', markersize=20, linewidth=5) + + assert np.issubdtype(ds['data'].dtype, np.integer) + + try: + return display.fig + finally: + matplotlib.pyplot.close(display.fig) + + @pytest.mark.mpl_image_compare(tolerance=10) def test_timeseries_invert(): ds = act.io.arm.read_arm_netcdf(sample_files.EXAMPLE_IRT25m20s)