@@ -101,6 +101,7 @@ def setUp(self):
101101 self .rh .df_final , self .days_list , self .var_list , self .rh .ha_config = (
102102 pickle .load (inp )
103103 )
104+ self .rh .var_list = self .var_list
104105 # Else obtain sensor values from HA
105106 else :
106107 if model_type == "long_train_data" :
@@ -287,6 +288,39 @@ def test_prepare_data_negative_load(self):
287288 self .rh .df_final .index .tz , self .retrieve_hass_conf ["time_zone" ]
288289 )
289290
291+ # Tests that the prepare_data method does convert missing PV values to zero
292+ # and also ignores any missing sensor columns.
293+ def test_prepare_data_missing_pv (self ):
294+ load_sensor = self .retrieve_hass_conf ["sensor_power_load_no_var_loads" ]
295+ actual_pv_sensor = self .retrieve_hass_conf ["sensor_power_photovoltaics" ]
296+ forecast_pv_sensor = self .retrieve_hass_conf ["sensor_power_photovoltaics_forecast" ]
297+ var_replace_zero = [actual_pv_sensor , forecast_pv_sensor , 'sensor.missing1' ]
298+ var_interp = [actual_pv_sensor , load_sensor , 'sensor.missing2' ]
299+ # Replace actual and forecast PV zero values with NaN's (to test they get replaced back)
300+ self .rh .df_final [actual_pv_sensor ] = self .rh .df_final [actual_pv_sensor ].replace (0 , np .nan )
301+ self .rh .df_final [forecast_pv_sensor ] = self .rh .df_final [forecast_pv_sensor ].replace (0 , np .nan )
302+ # Verify a non-zero number of missing values in the actual and forecast PV columns before prepare_data
303+ self .assertTrue (self .rh .df_final [actual_pv_sensor ].isna ().sum () > 0 )
304+ self .assertTrue (self .rh .df_final [forecast_pv_sensor ].isna ().sum () > 0 )
305+ self .rh .prepare_data (
306+ load_sensor ,
307+ load_negative = False ,
308+ set_zero_min = True ,
309+ var_replace_zero = var_replace_zero ,
310+ var_interp = var_interp
311+ )
312+ self .assertIsInstance (self .rh .df_final , type (pd .DataFrame ()))
313+ self .assertEqual (
314+ self .rh .df_final .index .isin (self .days_list ).sum (),
315+ self .df_raw .index .isin (self .days_list ).sum (),
316+ )
317+ # Check the before and after actual and forecast PV columns have the same number of values
318+ self .assertEqual (len (self .df_raw [actual_pv_sensor ]), len (self .rh .df_final [actual_pv_sensor ]))
319+ self .assertEqual (len (self .df_raw [forecast_pv_sensor ]), len (self .rh .df_final [forecast_pv_sensor ]))
320+ # Verify no missing values in the actual and forecast PV columns after prepare_data
321+ self .assertTrue (self .rh .df_final [actual_pv_sensor ].isna ().sum () == 0 )
322+ self .assertTrue (self .rh .df_final [forecast_pv_sensor ].isna ().sum () == 0 )
323+
290324 # Test publish data
291325 def test_publish_data (self ):
292326 response , data = self .rh .post_data (
0 commit comments