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)
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)
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)
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)
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
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
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()