From 860b2e1ec1bca589b02ab5740c04349367099e35 Mon Sep 17 00:00:00 2001 From: Felix Claessen Date: Tue, 3 Nov 2020 15:36:56 +0000 Subject: [PATCH] Merged in bugfix/empty-power-data (pull request #94) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bugfix/empty power data * Actually convert to pandas DataFrames for use in the UI. * Test multiplication for empty frames. * Remove test parameterization already commented out. Approved-by: Nicolas Höning --- bvp/data/queries/utils.py | 5 ++- bvp/data/tests/test_queries.py | 61 ++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/bvp/data/queries/utils.py b/bvp/data/queries/utils.py index f34296fa3..69b50f720 100644 --- a/bvp/data/queries/utils.py +++ b/bvp/data/queries/utils.py @@ -154,7 +154,7 @@ def simplify_index( else: raise KeyError(f"Level {col} not found") bdf.index = bdf.index.get_level_values("event_start") - return bdf + return pd.DataFrame(bdf) def multiply_dataframe_with_deterministic_beliefs( @@ -182,6 +182,9 @@ def multiply_dataframe_with_deterministic_beliefs( an additional "belief_horizon" column if both df1 and df2 contain this column, and an additional "source" column if result_source is set. """ + if df1.empty and df2.empty: + return df1 + df = (df1["event_value"] * df2["event_value"] * multiplication_factor).to_frame( name="event_value" ) diff --git a/bvp/data/tests/test_queries.py b/bvp/data/tests/test_queries.py index a9408b93c..d378a283a 100644 --- a/bvp/data/tests/test_queries.py +++ b/bvp/data/tests/test_queries.py @@ -136,3 +136,64 @@ def test_multiplication(): axis=0, ) pd.testing.assert_frame_equal(df, df_compare) + + +def test_multiplication_with_one_empty_dataframe(): + df1 = pd.DataFrame( + [], + columns=["event_value", "belief_horizon"], + ) + # set correct types + df1["event_value"] = pd.to_numeric(df1["event_value"]) + df1["belief_horizon"] = pd.to_timedelta(df1["belief_horizon"]) + + df2 = pd.DataFrame( + [[10.0, timedelta(hours=1)]], + index=pd.date_range( + "2000-01-01 13:00", "2000-01-01 18:00", freq="1h", closed="left" + ), + columns=["event_value", "belief_horizon"], + ) + + df_compare = pd.DataFrame( + [[np.nan, timedelta(hours=1)]], + index=pd.date_range( + "2000-01-01 13:00", "2000-01-01 18:00", freq="1h", closed="left" + ), + columns=["event_value", "belief_horizon"], + ) + # set correct types + df_compare["event_value"] = pd.to_numeric(df_compare["event_value"]) + df_compare["belief_horizon"] = pd.to_timedelta(df_compare["belief_horizon"]) + + df = multiply_dataframe_with_deterministic_beliefs(df1, df2) + pd.testing.assert_frame_equal(df, df_compare) + + +def test_multiplication_with_both_empty_dataframe(): + df1 = pd.DataFrame( + [], + columns=["event_value", "belief_horizon"], + ) + # set correct types + df1["event_value"] = pd.to_numeric(df1["event_value"]) + df1["belief_horizon"] = pd.to_timedelta(df1["belief_horizon"]) + + df2 = pd.DataFrame( + [], + columns=["event_value", "belief_horizon"], + ) + # set correct types + df2["event_value"] = pd.to_numeric(df2["event_value"]) + df2["belief_horizon"] = pd.to_timedelta(df2["belief_horizon"]) + + df_compare = pd.DataFrame( + [], + columns=["event_value", "belief_horizon"], + ) + # set correct types + df_compare["event_value"] = pd.to_numeric(df_compare["event_value"]) + df_compare["belief_horizon"] = pd.to_timedelta(df_compare["belief_horizon"]) + + df = multiply_dataframe_with_deterministic_beliefs(df1, df2) + pd.testing.assert_frame_equal(df, df_compare)