From d259b0db4e9ccca8426a77919ba4164978bc165c Mon Sep 17 00:00:00 2001 From: Peter Kraus Date: Thu, 18 Aug 2022 15:08:18 +0800 Subject: [PATCH] `extract`: Avoid interpolation when everything is `NaN` (#53) * Avoid interpolation when everything is NaN * Add a test. * black --- src/dgpost/utils/extract.py | 8 ++++++-- tests/test_extract.py | 20 ++++++++++++++++++++ tests/test_extract/nan.t1.pkl | Bin 0 -> 38123 bytes tests/test_extract/nan.t2.pkl | Bin 0 -> 37558 bytes tests/test_extract/nan.yaml | 23 +++++++++++++++++++++++ tests/test_extract/ref.nan.df.pkl | Bin 0 -> 81270 bytes 6 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 tests/test_extract/nan.t1.pkl create mode 100644 tests/test_extract/nan.t2.pkl create mode 100644 tests/test_extract/nan.yaml create mode 100644 tests/test_extract/ref.nan.df.pkl diff --git a/src/dgpost/utils/extract.py b/src/dgpost/utils/extract.py index 8b64631..5f42516 100644 --- a/src/dgpost/utils/extract.py +++ b/src/dgpost/utils/extract.py @@ -271,8 +271,12 @@ def _get_interp(spec, obj, at, ts): noms = unp.nominal_values(vals) sigs = unp.std_devs(vals) mask = ~np.isnan(noms) & ~np.isnan(sigs) - inoms = np.interp(ts, index[mask], noms[mask]) - isigs = np.interp(ts, index[mask], sigs[mask]) + if np.any(mask): + inoms = np.interp(ts, index[mask], noms[mask]) + isigs = np.interp(ts, index[mask], sigs[mask]) + else: + inoms = np.ones(len(ts)) * np.NaN + isigs = np.ones(len(ts)) * np.NaN colint.append(unp.uarray(inoms, isigs)) return colnames, colint, colunits diff --git a/tests/test_extract.py b/tests/test_extract.py index 8fcfb8f..188999b 100644 --- a/tests/test_extract.py +++ b/tests/test_extract.py @@ -290,3 +290,23 @@ def test_extract_df(infile, spec, outfile, datadir): print(f"{ref.head()=}") df.to_pickle(outfile) compare_dfs(ref, df) + + +@pytest.mark.parametrize( + "inpath, outpath", + [ + ( # ts0 - interpolate tables with nans + "nan.yaml", + "nan.df.pkl", + ), + ], +) +def test_extract_nan(inpath, outpath, datadir): + os.chdir(datadir) + dgpost.run(inpath) + df = pd.read_pickle(outpath) + print(f"{df.head()=}") + ref = pd.read_pickle(f"ref.{outpath}") + print(f"{ref.head()=}") + df.to_pickle(f"ref.{outpath}") + compare_dfs(ref, df) diff --git a/tests/test_extract/nan.t1.pkl b/tests/test_extract/nan.t1.pkl new file mode 100644 index 0000000000000000000000000000000000000000..55d35a1a6a99395c41b7e3f5741fefca9318940f GIT binary patch literal 38123 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 P5?we)rNi_97uEj*ozW{a literal 0 HcmV?d00001 diff --git a/tests/test_extract/nan.t2.pkl b/tests/test_extract/nan.t2.pkl new file mode 100644 index 0000000000000000000000000000000000000000..b1da4c8eb4f2cba87e4ef14ca21863ea2b00ff39 GIT binary patch literal 37558 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 VoD3;!svDEy&O1A83k-7C{vStCR0IG3 literal 0 HcmV?d00001 diff --git a/tests/test_extract/nan.yaml b/tests/test_extract/nan.yaml new file mode 100644 index 0000000..03fdd4e --- /dev/null +++ b/tests/test_extract/nan.yaml @@ -0,0 +1,23 @@ +version: "1.1" +load: + - as: t1 + path: nan.t1.pkl + type: table + - as: t2 + path: nan.t2.pkl + type: table +extract: + - into: df + from: t1 + columns: + - key: xout + as: xout(t1) + - into: df + from: t2 + columns: + - key: xout + as: xout(t2) +save: + - table: df + as: nan.df.pkl + \ No newline at end of file diff --git a/tests/test_extract/ref.nan.df.pkl b/tests/test_extract/ref.nan.df.pkl new file mode 100644 index 0000000000000000000000000000000000000000..b9d0b2ff7ef9f92e6c5b8e0b6ba0bfdb065d6c26 GIT binary patch literal 81270 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 literal 0 HcmV?d00001