def test_consumption_data_filter_by_period_arbitrary( consumption_data_kWh_arbitrary): period = Period(datetime(2015,1,1), datetime(2015,1,3)) filtered_data = consumption_data_kWh_arbitrary.filter_by_period(period).data assert_allclose(filtered_data, np.array([1,1,np.nan]), rtol=RTOL, atol=ATOL) assert filtered_data.index[0] == datetime(2015,1,1) assert filtered_data.index[2] == datetime(2015,1,3) period = Period(datetime(2014,1,1), datetime(2014,1,3,1)) filtered_data = consumption_data_kWh_arbitrary.filter_by_period(period).data assert_allclose(filtered_data, [], rtol=RTOL, atol=ATOL) period = Period(None, datetime(2015,1,3)) filtered_data = consumption_data_kWh_arbitrary.filter_by_period(period).data assert_allclose(filtered_data, np.array([1,1,np.nan]), rtol=RTOL, atol=ATOL) assert filtered_data.index[0] == datetime(2015,1,1) assert filtered_data.index[2] == datetime(2015,1,3) period = Period(datetime(2015,1,9),None) filtered_data = consumption_data_kWh_arbitrary.filter_by_period(period).data assert_allclose(filtered_data, np.array([1,1,np.nan]), rtol=RTOL, atol=ATOL) assert filtered_data.index[0] == datetime(2015,1,9) assert filtered_data.index[2] == datetime(2015,1,11) period = Period(None,None) filtered_data = consumption_data_kWh_arbitrary.filter_by_period(period).data assert_allclose(filtered_data, np.array([1,1,1,1,1,1,1,1,1,1,np.nan]), rtol=RTOL, atol=ATOL) assert filtered_data.index[0] == datetime(2015,1,1) assert filtered_data.index[10] == datetime(2015,1,11)
def test_project_generator(gsod_722880_2012_2014_weather_source, tmy3_722880_weather_source): electricity_model = AverageDailyTemperatureSensitivityModel(cooling=True, heating=True) gas_model = AverageDailyTemperatureSensitivityModel(cooling=False, heating=True) electricity_param_distributions = { "cooling_slope": uniform(loc=1, scale=.5), "heating_slope": uniform(loc=1, scale=.5), "base_daily_consumption": uniform(loc=5, scale=5), "cooling_balance_temperature": uniform(loc=70, scale=5), "heating_balance_temperature": uniform(loc=60, scale=5) } electricity_param_delta_distributions = { "cooling_slope": uniform(loc=-.2, scale=.3), "heating_slope": uniform(loc=-.2, scale=.3), "base_daily_consumption": uniform(loc=-2, scale=3), "cooling_balance_temperature": uniform(loc=0, scale=0), "heating_balance_temperature": uniform(loc=0, scale=0) } gas_param_distributions = { "heating_slope": uniform(loc=1, scale=.5), "base_daily_consumption": uniform(loc=5, scale=5), "heating_balance_temperature": uniform(loc=60, scale=5) } gas_param_delta_distributions = { "heating_slope": uniform(loc=-.2, scale=.3), "base_daily_consumption": uniform(loc=-2, scale=3), "heating_balance_temperature": uniform(loc=0, scale=0) } generator = ProjectGenerator(electricity_model, gas_model, electricity_param_distributions, electricity_param_delta_distributions, gas_param_distributions, gas_param_delta_distributions) location = Location(station="722880") period = Period(datetime(2012, 1, 1), datetime(2013, 1, 1)) baseline_period = Period(datetime(2012, 1, 1), datetime(2012, 4, 1)) reporting_period = Period(datetime(2012, 5, 1), datetime(2013, 1, 1)) results = generator.generate(location, period, period, baseline_period, reporting_period) project = results["project"] elec_data = project.consumption[0].data.values gas_data = project.consumption[1].data.values assert project.location == location assert results.get("electricity_estimated_savings") is not None assert results.get("natural_gas_estimated_savings") is not None assert results.get("electricity_pre_params") is not None assert results.get("natural_gas_pre_params") is not None assert results.get("electricity_post_params") is not None assert results.get("natural_gas_post_params") is not None assert len(elec_data) in range(9, 16) assert len(gas_data) in range(9, 16) assert elec_data[0] < 750 # could probably lower this upper bound assert gas_data[0] < 750 # could probably lower this upper bound
def test_consumption_data_filter_by_period_interval( consumption_data_kWh_interval): period = Period(datetime(2015, 1, 1), datetime(2015, 1, 3)) filtered_data = consumption_data_kWh_interval.filter_by_period(period).data assert_allclose(filtered_data, np.array([1, 1, 1]), rtol=RTOL, atol=ATOL) assert filtered_data.index[0] == datetime(2015, 1, 1) assert filtered_data.index[2] == datetime(2015, 1, 3) period = Period(datetime(2014, 1, 1), datetime(2014, 1, 3, 1)) filtered_data = consumption_data_kWh_interval.filter_by_period(period).data assert_allclose(filtered_data, [], rtol=RTOL, atol=ATOL) period = Period(None, datetime(2015, 1, 3)) filtered_data = consumption_data_kWh_interval.filter_by_period(period).data assert_allclose(filtered_data, np.array([1, 1, 1]), rtol=RTOL, atol=ATOL) assert filtered_data.index[0] == datetime(2015, 1, 1) assert filtered_data.index[2] == datetime(2015, 1, 3) period = Period(datetime(2015, 1, 9), None) filtered_data = consumption_data_kWh_interval.filter_by_period(period).data assert_allclose(filtered_data, np.array([1, 1]), rtol=RTOL, atol=ATOL) assert filtered_data.index[0] == datetime(2015, 1, 9) assert filtered_data.index[1] == datetime(2015, 1, 10) period = Period(None, None) filtered_data = consumption_data_kWh_interval.filter_by_period(period).data assert_allclose(filtered_data, np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1]), rtol=RTOL, atol=ATOL) assert filtered_data.index[0] == datetime(2015, 1, 1) assert filtered_data.index[9] == datetime(2015, 1, 10)
def test_period_both_open(): p = Period() assert p.start is None assert p.end is None assert p.timedelta is None assert not p.closed assert datetime(2013,1,1) in p assert datetime(2014,1,1) in p assert datetime(2014,1,1,12) in p assert datetime(2014,1,2) in p assert datetime(2015,1,1) in p assert p in p assert Period(datetime(2014,1,1),datetime(2014,1,2)) in p
def test_project_consumption_baseline_reporting(generated_consumption_data_1): cd, _ = generated_consumption_data_1 baseline_period = Period(datetime(2011,1,1),datetime(2013,6,1)) reporting_period = Period(datetime(2013,6,1),datetime(2016,1,1)) location = Location(zipcode="91104") project = Project(location,[cd],baseline_period,reporting_period) meter = ProjectConsumptionDataBaselineReporting() result = meter.evaluate_raw(project=project) assert result["consumption"][0]["value"].data.index[0] == datetime(2012,1,1) assert result["consumption"][0]["value"].data.index[17] == datetime(2013,5,25) assert result["consumption"][0]["tags"][0] == "electricity" assert result["consumption"][0]["tags"][1] == "baseline" assert result["consumption"][1]["value"].data.index[0] == datetime(2013,6,24) assert result["consumption"][1]["value"].data.index[18] == datetime(2014,12,16) assert result["consumption"][1]["tags"][0] == "electricity" assert result["consumption"][1]["tags"][1] == "reporting"
def periods(self): """ Converts DatetimeIndex (which is timestamp based) to an list of Periods, which have associated start and endtimes. Returns ------- periods : list of eemeter.evaluation.Period A list of consumption periods. """ if self.freq_timedelta is None: # ignore last period which is NaN and acting as an end point periods = [Period(start, end) for start, end in zip(self.data.index,self.data.index[1:])] return periods else: periods = [Period(dt, dt + self.freq_timedelta) for dt in self.data.index] return periods
def create_eemeter_project(project_row, consumption_data_rows): """ Given a row a pd.DataFrame for projects and a set of rows for consumption data rows, return eemeter project. """ location = Location(zipcode=project_row.zipcode, lat_lng=(project_row.latitude, project_row.longitude), station=project_row.weather_station) baseline_period = Period(project_row.baseline_period_start, project_row.baseline_period_end) reporting_period = Period(project_row.reporting_period_start, project_row.reporting_period_end) consumptions = _create_eemeter_consumptions(consumption_data_rows) project = Project(location, consumptions, baseline_period, reporting_period) return project
def default_residential_outputs_1(request, gsod_722880_2012_2014_weather_source): elec_model_params, gas_model_params, \ elec_annualized_usage, gas_annualized_usage, \ elec_gross_savings, gas_gross_savings, \ elec_rmse, gas_rmse, elec_r_squared, gas_r_squared, \ temp_unit, cdd_tmy, hdd_tmy, total_cdd, total_hdd \ = request.param period = Period(datetime(2012,1,1,tzinfo=pytz.utc), datetime(2014,12,31,tzinfo=pytz.utc)) retrofit_start_date = datetime(2013,6,1,tzinfo=pytz.utc) retrofit_completion_date = datetime(2013,8,1,tzinfo=pytz.utc) datetimes = generate_monthly_billing_datetimes(period,randint(30,31)) # generate electricity consumption elec_model = AverageDailyTemperatureSensitivityModel(cooling=True,heating=True) elec_params = { "base_daily_consumption": elec_model_params[0], "heating_balance_temperature": elec_model_params[1], "heating_slope": elec_model_params[2], "cooling_balance_temperature": elec_model_params[3], "cooling_slope": elec_model_params[4], } elec_gen = MonthlyBillingConsumptionGenerator("electricity", "kWh", temp_unit, elec_model, elec_params) elec_consumption_data = elec_gen.generate(gsod_722880_2012_2014_weather_source, datetimes) elec_consumption_kWh_per_day, elec_consumption_n_days = \ elec_consumption_data.average_daily_consumptions() elec_params = elec_model.param_type(elec_params) # generate natural_gas consumption gas_model = AverageDailyTemperatureSensitivityModel(cooling=False,heating=True) gas_params = { "base_daily_consumption": gas_model_params[0], "heating_balance_temperature": gas_model_params[1], "heating_slope": gas_model_params[2], } gas_gen = MonthlyBillingConsumptionGenerator("natural_gas", "therm", temp_unit, gas_model, gas_params) gas_consumption_data = gas_gen.generate(gsod_722880_2012_2014_weather_source, datetimes) gas_consumption_kWh_per_day, gas_consumption_n_days = \ gas_consumption_data.average_daily_consumptions() gas_params = gas_model.param_type(gas_params) fixture = elec_consumption_data, gas_consumption_data, \ elec_params, gas_params, \ elec_annualized_usage, gas_annualized_usage, \ elec_gross_savings, gas_gross_savings, \ elec_rmse, gas_rmse, \ elec_r_squared, gas_r_squared, \ elec_consumption_kWh_per_day, gas_consumption_kWh_per_day, \ elec_consumption_n_days, gas_consumption_n_days, \ temp_unit, retrofit_start_date, retrofit_completion_date, \ cdd_tmy, hdd_tmy, total_cdd, total_hdd return fixture
def create_project(params_e_pre, params_e_post, params_g_pre, params_g_post, baseline_period_start_date, baseline_period_end_date, reporting_period_start_date, reporting_period_end_date, has_electricity, has_gas, weather_source, zipcode): model_e = AverageDailyTemperatureSensitivityModel(heating=True, cooling=True) model_g = AverageDailyTemperatureSensitivityModel(heating=True, cooling=False) # generate consumption baseline_period = Period(baseline_period_start_date, reporting_period_start_date) datetimes_pre = generate_monthly_billing_datetimes(baseline_period, dist=randint(29, 31)) reporting_period = Period(datetimes_pre[-1], reporting_period_end_date) datetimes_post = generate_monthly_billing_datetimes(reporting_period, dist=randint(29, 31)) location = Location(zipcode=zipcode) baseline_period = Period(baseline_period_start_date, baseline_period_end_date) reporting_period = Period(reporting_period_start_date, reporting_period_end_date) cds = [] if has_electricity: cd_e = generate_consumption_records(model_e, params_e_pre, params_e_post, datetimes_pre, datetimes_post, "electricity", "kWh", weather_source) cds.append(cd_e) if has_gas: cd_g = generate_consumption_records(model_g, params_g_pre, params_g_post, datetimes_pre, datetimes_post, "natural_gas", "therm", weather_source) cds.append(cd_g) return Project(location, cds, baseline_period, reporting_period)
def test_project_null_station(): location = Location(zipcode="INVALID") with pytest.raises(ValueError): baseline_period = Period(datetime(2014,1,1), datetime(2015,1,1)) reporting_period = None project = Project(location, consumption=[], baseline_period=baseline_period, reporting_period=reporting_period, other_periods=[], weather_source=None, weather_normal_source=None)
def test_project_attributes(generated_consumption_data_1): cd,params = generated_consumption_data_1 baseline_period = Period(datetime(2014,1,1),datetime(2014,1,1)) location = Location(zipcode="91104") project = Project(location,[cd,cd],baseline_period,None) meter = ProjectFuelTypes(project) result = meter.evaluate_raw(project=project) assert len(result["fuel_types"]) == 2 assert result["fuel_types"][0]["value"] == "electricity" assert result["fuel_types"][0]["tags"] == ["electricity"] assert result["fuel_types"][1]["value"] == "electricity" assert result["fuel_types"][1]["tags"] == ["electricity"]
def test_generate_monthly_billing_datetimes(): period = Period(datetime(2012, 1, 1), datetime(2013, 1, 1)) datetimes_30d = generate_monthly_billing_datetimes(period, randint(30, 31)) assert datetimes_30d[0] == datetime(2012, 1, 1) assert datetimes_30d[1] == datetime(2012, 1, 31) assert datetimes_30d[11] == datetime(2012, 11, 26) assert datetimes_30d[12] == datetime(2012, 12, 26) datetimes_1d = generate_monthly_billing_datetimes(period, randint(1, 2)) assert datetimes_1d[0] == datetime(2012, 1, 1) assert datetimes_1d[1] == datetime(2012, 1, 2) assert datetimes_1d[330] == datetime(2012, 11, 26) assert datetimes_1d[331] == datetime(2012, 11, 27)
def test_project_attributes(generated_consumption_data_1): cd,params = generated_consumption_data_1 baseline_period = Period(datetime(2014,1,1),datetime(2014,1,1)) location = Location(zipcode="91104") project = Project(location,[cd],baseline_period,None) meter = ProjectAttributes(project) result = meter.evaluate_raw(project=project) assert result["location"].zipcode == location.zipcode assert result["consumption"][0] is not None assert result["baseline_period"] is not None assert result["reporting_period"] is None assert result["other_periods"] == [] assert result["weather_source"].station_id == "722880" assert result["weather_normal_source"].station_id == "722880"
def test_project_partial_period(): location = Location(zipcode="60604") baseline_period = Period(None, datetime(2015,1,1)) reporting_period = Period(datetime(2015, 1,1), None) project = Project(location, consumption=[], baseline_period=baseline_period, reporting_period=reporting_period, other_periods=[], weather_source=None, weather_normal_source=None) assert project.consumption == [] assert project.baseline_period.start is None assert project.baseline_period.end == datetime(2015,1,1) assert project.reporting_period.start == datetime(2015,1,1) assert project.reporting_period.end is None assert project.other_periods == [] assert project.weather_source.station_id == "725340" assert project.weather_normal_source.station_id == "725340" assert len(project.all_periods()) == 2 assert project._total_date_range()[0] == None assert project._total_date_range()[1] == None assert len(project.segmented_consumption_data()) == 0
def total_period(self): """ The total period over which consumption data is recorded. Returns ------- period : eemeter.evaluation.Period The total time span covered by this ConsumptionData instance. """ if self.data.shape[0] < 1: return None start_date = self.data.index[0] end_date = self.data.index[-1] if self.freq_timedelta is not None: end_date += self.freq_timedelta return Period(start_date, end_date)
def test_gross_savings_metric( generated_consumption_data_pre_post_with_gross_savings_1, gsod_722880_2012_2014_weather_source): model = AverageDailyTemperatureSensitivityModel(heating=True, cooling=True) meter = GrossSavingsMeter(temperature_unit_str="degF", model=model) cd, params_pre, params_post, retrofit_date, savings = \ generated_consumption_data_pre_post_with_gross_savings_1 reporting_period = Period(retrofit_date, datetime(2015, 1, 1)) result = meter.evaluate_raw( consumption_data_reporting=cd.filter_by_period(reporting_period), model_params_baseline=params_pre, weather_source=gsod_722880_2012_2014_weather_source, energy_unit_str="kWh") assert_allclose(result["gross_savings"], savings, rtol=RTOL, atol=ATOL)
def annual_daily_temperatures(self, unit): """Returns a list of daily temperature normals for a typical meteorological year. Parameters ---------- unit : {"degC", "degF"} The unit in which temperatures should be returned. Returns ------- out : np.ndarray List with single element which is an array of observed daily temperatures. """ periods = [Period(start=datetime(1900,1,1), end=datetime(1901,1,1))] return self.daily_temperatures(periods, unit)
def evaluate_raw(self, weather_normal_source, **kwargs): """Sums the total observed CDD in a normal year Parameters ---------- weather_normal_source : eemeter.weather.WeatherSourceBase and eemeter.weather.WeatherNormalMixin A weather data source from a location as geographically and climatically close as possible to the target project. Returns ------- out : dict - "normal_annual_hdd": the total cooling degree days observed during a typical meteorological year """ annual_period = Period(datetime(2013, 1, 1), datetime(2014, 1, 1)) cdd = weather_normal_source.cdd(annual_period, self.temperature_unit_str, self.base) return {"normal_annual_cdd": cdd}
def _normalize_period(self, period): start = self._normalize_datetime(period.start) year_offset = period.end.year - period.start.year end = self._normalize_datetime(period.end, year_offset) return Period(start, end)
def test_period_name(): p = Period(name="baseline") assert p.name == "baseline"
def test_period_end_closed(): p = Period(end=datetime(2014,1,2)) assert p.start is None assert p.end == datetime(2014,1,2) assert p.timedelta is None assert not p.closed assert datetime(2013,1,1) in p assert datetime(2014,1,1) in p assert datetime(2014,1,1,12) in p assert datetime(2014,1,2) in p assert datetime(2015,1,1) not in p assert Period(datetime(2013,1,1),datetime(2013,1,2)) in p assert Period(datetime(2013,1,1),datetime(2014,1,1)) in p assert Period(datetime(2013,1,1),datetime(2014,1,1,12)) in p assert Period(datetime(2013,1,1),datetime(2014,1,2)) in p assert Period(datetime(2013,1,1),datetime(2014,1,3)) not in p assert Period(datetime(2014,1,1),datetime(2014,1,1,12)) in p assert Period(datetime(2014,1,1),datetime(2014,1,2)) in p assert Period(datetime(2014,1,1),datetime(2014,1,3)) not in p assert Period(datetime(2014,1,1,12),datetime(2014,1,1,13)) in p assert Period(datetime(2014,1,1,12),datetime(2014,1,2)) in p assert Period(datetime(2014,1,1,12),datetime(2014,1,3)) not in p assert Period(datetime(2014,1,2),datetime(2014,1,3)) not in p assert Period(datetime(2014,1,3),datetime(2014,1,4)) not in p
def test_default_residential_meter(default_residential_outputs_1, gsod_722880_2012_2014_weather_source, tmy3_722880_weather_source): elec_consumption_data, gas_consumption_data, \ elec_params, gas_params, \ elec_annualized_usage, gas_annualized_usage, \ elec_gross_savings, gas_gross_savings, \ elec_rmse, gas_rmse, \ elec_r_squared, gas_r_squared, \ elec_consumption_kWh_per_day, gas_consumption_kWh_per_day, \ elec_consumption_n_days, gas_consumption_n_days, \ temp_unit, retrofit_start_date, retrofit_completion_date, \ cdd_tmy, hdd_tmy, total_cdd, total_hdd = \ default_residential_outputs_1 meter = DefaultResidentialMeter(temperature_unit_str=temp_unit) location = Location(station="722880") baseline_period = Period(datetime(2012,1,1,tzinfo=pytz.utc),retrofit_start_date) reporting_period = Period(retrofit_completion_date, datetime(2014,12,31,tzinfo=pytz.utc)) project = Project(location, [elec_consumption_data, gas_consumption_data], baseline_period, reporting_period) data_collection = DataCollection(project=project) result = meter.evaluate(data_collection) assert_allclose(result.get_data('annualized_usage', tags=['electricity','baseline']).value, elec_annualized_usage, rtol=RTOL, atol=ATOL) assert_allclose(result.get_data('annualized_usage', tags=['natural_gas','baseline']).value, gas_annualized_usage, rtol=RTOL, atol=ATOL) assert_allclose(result.get_data('annualized_usage', tags=['electricity','reporting']).value, elec_annualized_usage, rtol=RTOL, atol=ATOL) assert_allclose(result.get_data('annualized_usage', tags=['natural_gas','reporting']).value, gas_annualized_usage, rtol=RTOL, atol=ATOL) assert_allclose(result.get_data('gross_savings', tags=['electricity']).value, elec_gross_savings, rtol=RTOL, atol=ATOL) assert_allclose(result.get_data('gross_savings', tags=['natural_gas']).value, gas_gross_savings, rtol=RTOL, atol=ATOL) assert_allclose(result.get_data('average_daily_usages', tags=['electricity', 'baseline']).value, elec_consumption_kWh_per_day[:17], rtol=RTOL, atol=ATOL) assert_allclose(result.get_data('average_daily_usages', tags=['natural_gas', 'baseline']).value, gas_consumption_kWh_per_day[:17], rtol=RTOL, atol=ATOL) assert_allclose(result.get_data('average_daily_usages', tags=['electricity', 'reporting']).value, elec_consumption_kWh_per_day[20:], rtol=RTOL, atol=ATOL) assert_allclose(result.get_data('average_daily_usages', tags=['natural_gas', 'reporting']).value, gas_consumption_kWh_per_day[20:], rtol=RTOL, atol=ATOL) assert_allclose(result.get_data('cdd_tmy', tags=['electricity', 'baseline']).value, cdd_tmy, rtol=RTOL, atol=ATOL) assert_allclose(result.get_data('cdd_tmy', tags=['natural_gas', 'baseline']).value, cdd_tmy, rtol=RTOL, atol=ATOL) assert_allclose(result.get_data('cdd_tmy', tags=['electricity', 'reporting']).value, cdd_tmy, rtol=RTOL, atol=ATOL) assert_allclose(result.get_data('cdd_tmy', tags=['natural_gas', 'reporting']).value, cdd_tmy, rtol=RTOL, atol=ATOL) elec_rmse_results = result.search('rmse', ['electricity']) assert elec_rmse_results.count() == 2 for data_container in elec_rmse_results.iteritems(): assert_allclose(data_container.value, elec_rmse, rtol=RTOL, atol=ATOL) gas_rmse_results = result.search('rmse', ['natural_gas']) assert gas_rmse_results.count() == 2 for data_container in gas_rmse_results.iteritems(): assert_allclose(data_container.value, gas_rmse, rtol=RTOL, atol=ATOL) elec_r_squared_results = result.search('r_squared', ['electricity']) assert elec_r_squared_results.count() == 2 for data_container in elec_r_squared_results.iteritems(): assert_allclose(data_container.value, elec_r_squared, rtol=RTOL, atol=ATOL) gas_r_squared_results = result.search('r_squared', ['natural_gas']) assert gas_r_squared_results.count() == 2 for data_container in gas_r_squared_results.iteritems(): assert_allclose(data_container.value, gas_r_squared, rtol=RTOL, atol=ATOL)
def get_example_project(zipcode): # location location = Location(zipcode=zipcode) station = location.station weather_source = GSODWeatherSource(station,2011,2015) # model model_e = AverageDailyTemperatureSensitivityModel(cooling=True, heating=True) model_g = AverageDailyTemperatureSensitivityModel(cooling=False, heating=True) # model params params_e_b = { "cooling_slope": 1, "heating_slope": 1, "base_daily_consumption": 30, "cooling_balance_temperature": 73, "heating_balance_temperature": 68, } params_e_r = { "cooling_slope": .5, "heating_slope": .5, "base_daily_consumption": 15, "cooling_balance_temperature": 73, "heating_balance_temperature": 68, } params_g_b = { "heating_slope": .2, "base_daily_consumption": 2, "heating_balance_temperature": 68, } params_g_r = { "heating_slope": .1, "base_daily_consumption": 1, "heating_balance_temperature": 68, } #generators gen_e_b = MonthlyBillingConsumptionGenerator("electricity", "kWh", "degF", model_e, params_e_b) gen_e_r = MonthlyBillingConsumptionGenerator("electricity", "kWh", "degF", model_e, params_e_r) gen_g_b = MonthlyBillingConsumptionGenerator("natural_gas", "therm", "degF", model_g, params_g_b) gen_g_r = MonthlyBillingConsumptionGenerator("natural_gas", "therm", "degF", model_g, params_g_r) # time periods period = Period(datetime(2011,1,1,tzinfo=pytz.utc), datetime(2015,1,1,tzinfo=pytz.utc)) datetimes = generate_monthly_billing_datetimes(period, dist=randint(30,31)) # consumption data cd_e_b = gen_e_b.generate(weather_source, datetimes, daily_noise_dist=None) cd_e_r = gen_e_r.generate(weather_source, datetimes, daily_noise_dist=None) cd_g_b = gen_g_b.generate(weather_source, datetimes, daily_noise_dist=None) cd_g_r = gen_g_r.generate(weather_source, datetimes, daily_noise_dist=None) # periods periods = cd_e_b.periods() reporting_period = Period(datetime(2013,1,1,tzinfo=pytz.utc), datetime(2015,1,1,tzinfo=pytz.utc)) baseline_period = Period(datetime(2011,1,1,tzinfo=pytz.utc), datetime(2013,1,1,tzinfo=pytz.utc)) # records records_e = [] records_g = [] for e_b, e_r, g_b, g_r, p in zip(cd_e_b.data, cd_e_r.data, cd_g_b.data, cd_g_r.data, periods): e = e_r if p in reporting_period else e_b g = g_r if p in reporting_period else g_b record_e = {"start": p.start, "end": p.end, "value": e} record_g = {"start": p.start, "end": p.end, "value": g} records_e.append(record_e) records_g.append(record_g) # consumption_data cd_e = ConsumptionData(records_e, "electricity", "kWh", record_type="arbitrary") cd_g = ConsumptionData(records_g, "natural_gas", "therm", record_type="arbitrary") consumptions = [cd_e, cd_g] # project project = Project(location, consumptions, baseline_period, reporting_period) return project
model_params, fuel_type, consumption_unit_name, temperature_unit_name = \ request.param model = AverageDailyTemperatureSensitivityModel(cooling=True, heating=True) params = { "base_daily_consumption": model_params[0], "heating_slope": model_params[1], "heating_balance_temperature": model_params[2], "cooling_slope": model_params[3], "cooling_balance_temperature": model_params[4] } generator = MonthlyBillingConsumptionGenerator(fuel_type, consumption_unit_name, temperature_unit_name, model, params) params = model.param_type(params) return generator, params @pytest.fixture(params=[(Period(datetime(2012,1,1),datetime(2014,12,31)), randint(30,31))]) def generated_consumption_data_1(request, gsod_722880_2012_2014_weather_source, consumption_generator_1): period, dist = request.param generator, params = consumption_generator_1 datetimes = generate_monthly_billing_datetimes(period, dist) consumption_data = generator.generate( gsod_722880_2012_2014_weather_source, datetimes) return consumption_data, params @pytest.fixture(params=[(Period(datetime(2012,1,1),datetime(2014,12,31)),randint(30,31))]) def generated_consumption_data_2(request, gsod_722880_2012_2014_weather_source, consumption_generator_2): period, dist = request.param generator, params = consumption_generator_2
def test_period_both_closed(): p = Period(datetime(2014,1,1),datetime(2014,1,2)) assert p.start == datetime(2014,1,1) assert p.end == datetime(2014,1,2) assert p.timedelta == timedelta(days=1) assert p.closed assert datetime(2013,1,1) not in p assert datetime(2014,1,1) in p assert datetime(2014,1,1,12) in p assert datetime(2014,1,2) in p assert datetime(2015,1,1) not in p assert Period(datetime(2013,1,1),datetime(2013,1,2)) not in p assert Period(datetime(2013,1,1),datetime(2014,1,1)) not in p assert Period(datetime(2013,1,1),datetime(2014,1,1,12)) not in p assert Period(datetime(2013,1,1),datetime(2014,1,2)) not in p assert Period(datetime(2013,1,1),datetime(2014,1,3)) not in p assert Period(datetime(2014,1,1),datetime(2014,1,1,12)) in p assert Period(datetime(2014,1,1),datetime(2014,1,2)) in p assert Period(datetime(2014,1,1),datetime(2014,1,3)) not in p assert Period(datetime(2014,1,1,12),datetime(2014,1,1,13)) in p assert Period(datetime(2014,1,1,12),datetime(2014,1,2)) in p assert Period(datetime(2014,1,1,12),datetime(2014,1,3)) not in p assert Period(datetime(2014,1,2),datetime(2014,1,3)) not in p assert Period(datetime(2014,1,3),datetime(2014,1,4)) not in p