def test_one_fire(self): original_fire_1 = copy.deepcopy(self.FIRE_1) merged_fires = firemerge.FireMerger().merge([self.FIRE_1]) assert len(merged_fires) == 1 assert merged_fires == [self.FIRE_1] # make sure input fire wasn't modified assert self.FIRE_1 == original_fire_1
def test_conflicting_meta(self): original_fire_1 = copy.deepcopy(self.FIRE_1) original_fire_conflicting_meta = copy.deepcopy(self.FIRE_CONFLICTING_META) # shouldn't be merged merged_fires = firemerge.FireMerger().merge([self.FIRE_1, self.FIRE_CONFLICTING_META]) assert len(merged_fires) == 2 assert merged_fires == [self.FIRE_1, self.FIRE_CONFLICTING_META] # make sure input fire wasn't modified assert self.FIRE_1 == original_fire_1 assert self.FIRE_CONFLICTING_META == original_fire_conflicting_meta
def test_overlapping_time_windows(self): original_fire_1 = copy.deepcopy(self.FIRE_1) original_overlapping_time_windows = copy.deepcopy(self.FIRE_OVERLAPPING_TIME_WINDOWS) # shouldn't be merged merged_fires = firemerge.FireMerger().merge([self.FIRE_1, self.FIRE_OVERLAPPING_TIME_WINDOWS]) assert len(merged_fires) == 2 assert merged_fires == [self.FIRE_1, self.FIRE_OVERLAPPING_TIME_WINDOWS] # make sure input fire wasn't modified assert self.FIRE_1 == original_fire_1 assert self.FIRE_OVERLAPPING_TIME_WINDOWS == original_overlapping_time_windows
def test_differenent_lat_lng(self): original_fire_1 = copy.deepcopy(self.FIRE_1) original_fire_different_lat_lng = copy.deepcopy(self.FIRE_DIFFERENT_LAT_LNG) # shouldn't be merged merged_fires = firemerge.FireMerger().merge([self.FIRE_1, self.FIRE_DIFFERENT_LAT_LNG]) assert len(merged_fires) == 2 assert merged_fires == [self.FIRE_1, self.FIRE_DIFFERENT_LAT_LNG] # make sure input fire wasn't modified assert self.FIRE_1 == original_fire_1 assert self.FIRE_DIFFERENT_LAT_LNG == original_fire_different_lat_lng
def test_contiguous_time_windows(self, monkeypatch): monkeypatch.setattr(uuid, 'uuid4', lambda: '1234abcd') original_fire_1 = copy.deepcopy(self.FIRE_1) original_fire_contiguous_time_windows = copy.deepcopy(self.FIRE_CONTIGUOUS_TIME_WINDOWS) # *should* be merged merged_fires = firemerge.FireMerger().merge([self.FIRE_1, self.FIRE_CONTIGUOUS_TIME_WINDOWS]) expected_merged_fires = [ Fire({ "id": "1234abcd", "original_fire_ids": {"SF11C14225236095807750"}, "meta": {'foo': 'bar', 'bar': 'asdasd'}, "start": datetime.datetime(2015,8,4,17,0,0), "end": datetime.datetime(2015,8,4,21,0,0), "area": 220.0, "latitude": 47.41, "longitude": -121.41, "utc_offset": -7.0, "plumerise": { "2015-08-04T17:00:00": PLUMERISE_HOUR, "2015-08-04T18:00:00": EMPTY_PLUMERISE_HOUR, "2015-08-04T19:00:00": PLUMERISE_HOUR, "2015-08-04T20:00:00": EMPTY_PLUMERISE_HOUR }, "timeprofiled_area": { "2015-08-04T17:00:00": 12.0, "2015-08-04T18:00:00": 0.0, "2015-08-04T19:00:00": 10.0, "2015-08-04T20:00:00": 0.0 }, "timeprofiled_emissions": { "2015-08-04T17:00:00": {"CO": 0.0, "PM2.5": 4.0}, # == 5.0 * 0.2 + 10.0 * 0.1 + 20.0 * 0.1 "2015-08-04T18:00:00": {"CO": 0.0, 'PM2.5': 0.0}, "2015-08-04T19:00:00": {"CO": 0.0, "PM2.5": 5.0}, # == 10.0 * 0.2 + 10.0 * 0.1 + 20.0 * 0.1 "2015-08-04T20:00:00": {"CO": 0.0, 'PM2.5': 0.0} }, "consumption": {k: 2*v for k,v in CONSUMPTION['summary'].items()}, "heat": 4000000.0 }) ] assert len(merged_fires) == len(expected_merged_fires) assert merged_fires == expected_merged_fires # make sure input fire wasn't modified assert self.FIRE_1 == original_fire_1 assert self.FIRE_CONTIGUOUS_TIME_WINDOWS == original_fire_contiguous_time_windows
def test_all(self, monkeypatch): monkeypatch.setattr(uuid, 'uuid4', lambda: '1234abcd') original_fire_1 = copy.deepcopy(self.FIRE_1) original_overlapping_time_windows = copy.deepcopy(self.FIRE_OVERLAPPING_TIME_WINDOWS) original_fire_contiguous_time_windows = copy.deepcopy(self.FIRE_CONTIGUOUS_TIME_WINDOWS) original_fire_non_contiguous_time_windows = copy.deepcopy(self.FIRE_NON_CONTIGUOUS_TIME_WINDOWS) original_fire_conflicting_meta = copy.deepcopy(self.FIRE_CONFLICTING_META) original_fire_different_lat_lng = copy.deepcopy(self.FIRE_DIFFERENT_LAT_LNG) merged_fires = firemerge.FireMerger().merge([ self.FIRE_1, self.FIRE_OVERLAPPING_TIME_WINDOWS, self.FIRE_CONTIGUOUS_TIME_WINDOWS, self.FIRE_NON_CONTIGUOUS_TIME_WINDOWS, self.FIRE_CONFLICTING_META, self.FIRE_DIFFERENT_LAT_LNG ]) expected_merged_fires = [ # FIRE_1 merged with FIRE_CONTIGUOUS_TIME_WINDOWS Fire({ "id": "1234abcd", "original_fire_ids": {"SF11C14225236095807750"}, "meta": {'foo': 'bar', 'bar': 'asdasd'}, "start": datetime.datetime(2015,8,4,17,0,0), "end": datetime.datetime(2015,8,4,21,0,0), "area": 220.0, "latitude": 47.41, "longitude": -121.41, "utc_offset": -7.0, "plumerise": { "2015-08-04T17:00:00": PLUMERISE_HOUR, "2015-08-04T18:00:00": EMPTY_PLUMERISE_HOUR, "2015-08-04T19:00:00": PLUMERISE_HOUR, "2015-08-04T20:00:00": EMPTY_PLUMERISE_HOUR }, "timeprofiled_area": { "2015-08-04T17:00:00": 12.0, "2015-08-04T18:00:00": 0.0, "2015-08-04T19:00:00": 10.0, "2015-08-04T20:00:00": 0.0 }, "timeprofiled_emissions": { "2015-08-04T17:00:00": {"CO": 0.0, "PM2.5": 4.0}, # == 5.0 * 0.2 + 10.0 * 0.1 + 20.0 * 0.1 "2015-08-04T18:00:00": {"CO": 0.0, 'PM2.5': 0.0}, "2015-08-04T19:00:00": {"CO": 0.0, "PM2.5": 5.0}, # == 10.0 * 0.2 + 10.0 * 0.1 + 20.0 * 0.1 "2015-08-04T20:00:00": {"CO": 0.0, 'PM2.5': 0.0} }, "consumption": {k: 2*v for k,v in CONSUMPTION['summary'].items()}, "heat": 4000000.0 }), # FIRE_OVERLAPPING_TIME_WINDOWS merged with # FIRE_NON_CONTIGUOUS_TIME_WINDOWS Fire({ "id": "1234abcd", "original_fire_ids": {"SF11C14225236095807750"}, "meta": {'foo': 'bar', 'bar': 'sdf'}, "start": datetime.datetime(2015,8,4,18,0,0), "end": datetime.datetime(2015,8,4,22,0,0), "area": 240.0, "latitude": 47.41, "longitude": -121.41, "utc_offset": -7.0, "plumerise": { "2015-08-04T18:00:00": PLUMERISE_HOUR, "2015-08-04T19:00:00": EMPTY_PLUMERISE_HOUR, "2015-08-04T20:00:00": PLUMERISE_HOUR, "2015-08-04T21:00:00": EMPTY_PLUMERISE_HOUR }, "timeprofiled_area": { "2015-08-04T18:00:00": 12.0, "2015-08-04T19:00:00": 0.0, "2015-08-04T20:00:00": 12.0, "2015-08-04T21:00:00": 0.0 }, "timeprofiled_emissions": { "2015-08-04T18:00:00": {"CO": 0.0, "PM2.5": 4.0}, "2015-08-04T19:00:00": {"CO": 0.0, 'PM2.5': 0.0}, "2015-08-04T20:00:00": {"CO": 0.0, "PM2.5": 4.0}, "2015-08-04T21:00:00": {"CO": 0.0, 'PM2.5': 0.0} }, "consumption": {k: 2*v for k,v in CONSUMPTION['summary'].items()}, "heat": 6000000.0 }), self.FIRE_CONFLICTING_META, self.FIRE_DIFFERENT_LAT_LNG ] assert len(merged_fires) == len(expected_merged_fires) assert merged_fires == expected_merged_fires # make sure input fire wasn't modified assert self.FIRE_1 == original_fire_1 assert self.FIRE_OVERLAPPING_TIME_WINDOWS == original_overlapping_time_windows assert self.FIRE_CONTIGUOUS_TIME_WINDOWS == original_fire_contiguous_time_windows assert self.FIRE_NON_CONTIGUOUS_TIME_WINDOWS == original_fire_non_contiguous_time_windows assert self.FIRE_CONFLICTING_META == original_fire_conflicting_meta assert self.FIRE_DIFFERENT_LAT_LNG == original_fire_different_lat_lng