示例#1
0
    def test_kwargs(self):
        patch = EOPatch()
        shape = (3, 5, 5, 2)

        data1 = np.random.randint(0, 5, size=shape)
        data2 = np.random.randint(0, 5, size=shape)

        patch[(FeatureType.DATA, 'D1')] = data1
        patch[(FeatureType.DATA, 'D2')] = data2

        task0 = MapFeatureTask((FeatureType.DATA, 'D1'),
                               (FeatureType.DATA_TIMELESS, 'NON_ZERO'),
                               np.count_nonzero,
                               axis=0)

        task1 = MapFeatureTask((FeatureType.DATA, 'D1'),
                               (FeatureType.DATA_TIMELESS, 'MAX1'),
                               np.max, axis=0)

        task2 = ZipFeatureTask({FeatureType.DATA: ['D1', 'D2']},
                               (FeatureType.DATA, 'MAX2'),
                               np.maximum,
                               dtype=np.float32)

        patch = task0(patch)
        patch = task1(patch)
        patch = task2(patch)

        self.assertTrue(np.array_equal(patch[(FeatureType.DATA_TIMELESS, 'NON_ZERO')], np.count_nonzero(data1, axis=0)))
        self.assertTrue(np.array_equal(patch[(FeatureType.DATA_TIMELESS, 'MAX1')], np.max(data1, axis=0)))
        self.assertTrue(np.array_equal(patch[(FeatureType.DATA, 'MAX2')], np.maximum(data1, data2)))
示例#2
0
def test_kwargs():
    patch = EOPatch()
    shape = (3, 5, 5, 2)

    data1 = np.random.randint(0, 5, size=shape)
    data2 = np.random.randint(0, 5, size=shape)

    patch[(FeatureType.DATA, "D1")] = data1
    patch[(FeatureType.DATA, "D2")] = data2

    task0 = MapFeatureTask((FeatureType.DATA, "D1"),
                           (FeatureType.DATA_TIMELESS, "NON_ZERO"),
                           np.count_nonzero,
                           axis=0)

    task1 = MapFeatureTask((FeatureType.DATA, "D1"),
                           (FeatureType.DATA_TIMELESS, "MAX1"),
                           np.max,
                           axis=0)

    task2 = ZipFeatureTask({FeatureType.DATA: ["D1", "D2"]},
                           (FeatureType.DATA, "MAX2"),
                           np.maximum,
                           dtype=np.float32)

    patch = task0(patch)
    patch = task1(patch)
    patch = task2(patch)

    assert np.array_equal(patch[(FeatureType.DATA_TIMELESS, "NON_ZERO")],
                          np.count_nonzero(data1, axis=0))
    assert np.array_equal(patch[(FeatureType.DATA_TIMELESS, "MAX1")],
                          np.max(data1, axis=0))
    assert np.array_equal(patch[(FeatureType.DATA, "MAX2")],
                          np.maximum(data1, data2))
示例#3
0
    def test_map_features(self):
        patch = EOPatch.load(self.data_path)

        move = MapFeatureTask({FeatureType.DATA: ['CLP', 'NDVI', 'BANDS-S2-L1C']},
                              {FeatureType.DATA: ['CLP2', 'NDVI2', 'BANDS-S2-L1C2']}, copy.deepcopy)

        patch = move(patch)

        self.assertTrue(np.array_equal(patch.data['CLP'], patch.data['CLP2']))
        self.assertTrue(np.array_equal(patch.data['NDVI'], patch.data['NDVI2']))
        self.assertTrue(np.array_equal(patch.data['BANDS-S2-L1C'], patch.data['BANDS-S2-L1C2']))

        self.assertTrue(id(patch.data['CLP']) != id(patch.data['CLP2']))
        self.assertTrue(id(patch.data['NDVI']) != id(patch.data['NDVI2']))
        self.assertTrue(id(patch.data['BANDS-S2-L1C']) != id(patch.data['BANDS-S2-L1C2']))

        map_fail = MapFeatureTask({FeatureType.DATA: ['CLP', 'NDVI']}, {FeatureType.DATA: ['CLP2', 'NDVI2', ]})
        self.assertRaises(NotImplementedError, map_fail, patch)

        f_in, f_out = {FeatureType.DATA: ['CLP', 'NDVI']}, {FeatureType.DATA: ['CLP2']}
        self.assertRaises(ValueError, MapFeatureTask, f_in, f_out)
示例#4
0
def test_map_features(test_eopatch):

    move = MapFeatureTask(
        {FeatureType.DATA: ["CLP", "NDVI", "BANDS-S2-L1C"]},
        {FeatureType.DATA: ["CLP2", "NDVI2", "BANDS-S2-L1C2"]},
        copy.deepcopy,
    )

    patch = move(test_eopatch)

    assert np.array_equal(patch.data["CLP"], patch.data["CLP2"])
    assert np.array_equal(patch.data["NDVI"], patch.data["NDVI2"])
    assert np.array_equal(patch.data["BANDS-S2-L1C"],
                          patch.data["BANDS-S2-L1C2"])

    assert id(patch.data["CLP"]) != id(patch.data["CLP2"])
    assert id(patch.data["NDVI"]) != id(patch.data["NDVI2"])
    assert id(patch.data["BANDS-S2-L1C"]) != id(patch.data["BANDS-S2-L1C2"])

    map_fail = MapFeatureTask(
        {FeatureType.DATA: ["CLP", "NDVI"]},
        {FeatureType.DATA: [
            "CLP2",
            "NDVI2",
        ]},
    )
    with pytest.raises(NotImplementedError):
        map_fail(patch)

    f_in, f_out = {
        FeatureType.DATA: ["CLP", "NDVI"]
    }, {
        FeatureType.DATA: ["CLP2"]
    }
    with pytest.raises(ValueError):
        MapFeatureTask(f_in, f_out)
    def execute(self, eopatch, **kwargs):
        output_features = [
            (self.output_feature_type, f"{self.feature_name_prefix}{ind}") for ind in range(len(self.functions))
        ]
        merge_task = MergeFeatureTask(output_features, self.output_feature)
        remove_task = RemoveFeature(output_features)

        for ind, (function, *f_kwargs) in enumerate(self.functions):
            pass_kwargs = f_kwargs[0] if f_kwargs else {}
            eopatch = MapFeatureTask(self.input_feature,
                                     (self.output_feature_type, f"{self.feature_name_prefix}{ind}"),
                                     function, **pass_kwargs)(eopatch)

        eopatch = merge_task(eopatch)
        return remove_task(eopatch)
class ComposeTask(EOTask):
    """Composes several tasks together.
    """

    def __init__(self, tasks):
        self.tasks = tasks

    def execute(self, eopatch):
        for t in self.tasks:
            eopatch = t(eopatch)
        return eopatch

""" Clouds tasks """
# convert cloud probas to cloud masks
cloud_mask = MapFeatureTask((FeatureType.DATA, 'CLOUD_PROB'),
                            (FeatureType.MASK, 'CLOUD'),
                            to_mask,
                            threshold=50)

# apply erosion to cloud mask
cloud_erosion = MapFeatureTask((FeatureType.MASK, 'CLOUD'),
                               (FeatureType.MASK, 'CLOUD'),
                               post_process_mask,
                               operation=binary_erosion,
                               element=disk(2))

# apply cloud dilation to cloud mask
cloud_dilation = MapFeatureTask((FeatureType.MASK, 'CLOUD'),
                                (FeatureType.MASK, 'CLOUD'),
                                post_process_mask,
                                operation=binary_dilation,
                                element=disk(10))