예제 #1
0
    def test_merge_label_overviews_empty_counts(self) -> None:
        # Right side is empty
        overview_1 = LabelOverview.create(
            property_key="label",
            counts=[
                LabelCount.create(name="water", count=25),
                LabelCount.create(name="land", count=17),
            ],
        )
        overview_2 = LabelOverview.create(
            property_key="label",
            counts=None,
        )

        merged_overview_1 = overview_1.merge_counts(overview_2)
        expected_counts = [c.to_dict() for c in get_opt(overview_1.counts)]
        actual_counts = [
            c.to_dict() for c in get_opt(merged_overview_1.counts)
        ]
        self.assertListEqual(expected_counts, actual_counts)

        # Left side is empty
        merged_overview_2 = overview_2.merge_counts(overview_1)
        expected_counts = [c.to_dict() for c in get_opt(overview_1.counts)]
        actual_counts = [
            c.to_dict() for c in get_opt(merged_overview_2.counts)
        ]
        self.assertEqual(expected_counts, actual_counts)
예제 #2
0
    def test_merge_label_overviews(self) -> None:

        overview_1 = LabelOverview.create(
            property_key="label",
            counts=[
                LabelCount.create(name="water", count=25),
                LabelCount.create(name="land", count=17),
            ],
        )
        overview_2 = LabelOverview.create(
            property_key="label",
            counts=[
                LabelCount.create(name="water", count=10),
                LabelCount.create(name="unknown", count=4),
            ],
        )
        merged_overview = overview_1.merge_counts(overview_2)

        merged_counts = get_opt(merged_overview.counts)

        water_count = next(c for c in merged_counts if c.name == "water")
        land_count = next(c for c in merged_counts if c.name == "land")
        unknown_count = next(c for c in merged_counts if c.name == "unknown")

        self.assertEqual(35, water_count.count)
        self.assertEqual(17, land_count.count)
        self.assertEqual(4, unknown_count.count)
예제 #3
0
    def test_label_count_equality(self) -> None:
        stats1 = LabelStatistics.create(name="prop", value=42.3)
        count1 = LabelCount.create(name="prop", count=1)

        overview1 = LabelOverview.create(property_key="first",
                                         counts=[count1],
                                         statistics=[stats1])
        overview2 = LabelOverview.create(property_key="first",
                                         counts=[count1],
                                         statistics=[stats1])
        overview3 = LabelOverview.create(property_key="first", counts=[count1])
        overview4 = LabelOverview.create(property_key="first",
                                         statistics=[stats1])
        self.assertEqual(overview1, overview2)
        self.assertNotEqual(overview1, overview3)
        self.assertNotEqual(overview1, overview4)
        self.assertNotEqual(overview1, 42)
예제 #4
0
    def test_merge_label_overviews_error(self) -> None:
        overview_1 = LabelOverview.create(
            property_key="label",
            counts=[
                LabelCount.create(name="water", count=25),
                LabelCount.create(name="land", count=17),
            ],
        )
        overview_2 = LabelOverview.create(
            property_key="not label",
            counts=[
                LabelCount.create(name="water", count=10),
                LabelCount.create(name="unknown", count=4),
            ],
        )

        with self.assertRaises(AssertionError):
            _ = overview_1.merge_counts(overview_2)
예제 #5
0
    def test_case_3() -> Catalog:
        root_cat = Catalog(id="test3",
                           description="test case 3 catalog",
                           title="test case 3 title")

        image_item = Item(
            id="imagery-item",
            geometry=ARBITRARY_GEOM,
            bbox=ARBITRARY_BBOX,
            datetime=datetime.utcnow(),
            properties={},
        )

        image_item.add_asset(
            "ortho",
            Asset(href="some/geotiff.tiff", media_type=MediaType.GEOTIFF))

        overviews = [
            LabelOverview.create(
                "label",
                counts=[
                    LabelCount.create("one", 1),
                    LabelCount.create("two", 2)
                ],
            )
        ]

        label_item = Item(
            id="label-items",
            geometry=ARBITRARY_GEOM,
            bbox=ARBITRARY_BBOX,
            datetime=datetime.utcnow(),
            properties={},
        )

        LabelExtension.add_to(label_item)
        label_ext = LabelExtension.ext(label_item)
        label_ext.apply(
            label_description="ML Labels",
            label_type=LabelType.VECTOR,
            label_properties=["label"],
            label_classes=[
                LabelClasses.create(classes=["one", "two"], name="label")
            ],
            label_tasks=["classification"],
            label_methods=["manual"],
            label_overviews=overviews,
        )
        label_ext.add_source(image_item, assets=["ortho"])

        root_cat.add_item(image_item)
        root_cat.add_item(label_item)

        return root_cat
예제 #6
0
    def test_case_3():
        root_cat = Catalog(id='test3',
                           description='test case 3 catalog',
                           title='test case 3 title')

        image_item = Item(id='imagery-item',
                          geometry=RANDOM_GEOM,
                          bbox=RANDOM_BBOX,
                          datetime=datetime.utcnow(),
                          properties={})

        image_item.add_asset(
            'ortho',
            Asset(href='some/geotiff.tiff', media_type=MediaType.GEOTIFF))

        overviews = [
            LabelOverview.create('label',
                                 counts=[
                                     LabelCount.create('one', 1),
                                     LabelCount.create('two', 2)
                                 ])
        ]

        label_item = Item(id='label-items',
                          geometry=RANDOM_GEOM,
                          bbox=RANDOM_BBOX,
                          datetime=datetime.utcnow(),
                          properties={})

        label_item.ext.enable(Extensions.LABEL)
        label_item.ext.label.apply(label_description='ML Labels',
                                   label_type='vector',
                                   label_properties=['label'],
                                   label_classes=[
                                       LabelClasses.create(
                                           classes=['one', 'two'],
                                           name='label')
                                   ],
                                   label_tasks=['classification'],
                                   label_methods=['manual'],
                                   label_overviews=overviews)
        label_item.ext.label.add_source(image_item, assets=['ortho'])

        root_cat.add_item(image_item)
        root_cat.add_item(label_item)

        return root_cat
예제 #7
0
    def test_label_overviews(self) -> None:
        # Get
        label_item = pystac.Item.from_file(self.label_example_1_uri)
        label_ext = LabelExtension.ext(label_item)
        label_overviews = get_opt(label_ext.label_overviews)

        label_item2 = pystac.Item.from_file(self.label_example_2_uri)
        label_ext2 = LabelExtension.ext(label_item2)
        label_overviews2 = get_opt(label_ext2.label_overviews)

        self.assertEqual(len(label_overviews), 2)
        self.assertEqual(label_overviews[1].property_key, "label-reg")
        self.assertEqual(label_overviews2[1].property_key, None)  # Raster

        label_counts = get_opt(label_overviews[0].counts)
        self.assertEqual(label_counts[1].count, 17)
        first_overview_counts = get_opt(label_ext.label_overviews)[0].counts
        assert first_overview_counts is not None
        first_overview_counts[1].count = 18
        self.assertEqual(
            label_item.properties["label:overviews"][0]["counts"][1]["count"],
            18)
        self.assertEqual(first_overview_counts[1].name, "two")

        label_statistics = get_opt(label_overviews[1].statistics)
        self.assertEqual(label_statistics[0].name, "mean")
        second_overview_statistics = get_opt(
            label_ext.label_overviews)[1].statistics
        assert second_overview_statistics is not None
        second_overview_statistics[0].name = "avg"
        self.assertEqual(
            label_item.properties["label:overviews"][1]["statistics"][0]
            ["name"], "avg")

        # Set
        new_overviews = [
            LabelOverview.create(
                property_key="label2",
                counts=[
                    LabelCount.create(name="one", count=1),
                    LabelCount.create(name="two", count=1),
                ],
            ),
            LabelOverview.create(
                property_key="label-reg",
                statistics=[
                    LabelStatistics.create(name="min", value=0.1),
                    LabelStatistics.create(name="max", value=1.0),
                ],
            ),
        ]

        label_ext.label_overviews = new_overviews
        self.assertEqual(
            [(count["name"], count["count"])
             for count in label_item.properties["label:overviews"][0]["counts"]
             ],
            [("one", 1), ("two", 1)],
        )

        self.assertEqual(
            [(count["name"], count["value"]) for count in
             label_item.properties["label:overviews"][1]["statistics"]],
            [("min", 0.1), ("max", 1.0)],
        )

        label_item.validate()