コード例 #1
0
    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
コード例 #2
0
    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
コード例 #3
0
    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
コード例 #4
0
    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
コード例 #5
0
    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
コード例 #6
0
    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