def test_aggregate_raster_values_all_polys(self):
        """PyGeoprocessing: test aggregate raster values as a lump."""
        import pygeoprocessing

        base_raster_path = os.path.join(TEST_DATA,
                                        'aggregate_raster_values_data',
                                        'base_raster.tif')
        shapefile_path = os.path.join(TEST_DATA,
                                      'aggregate_raster_values_data',
                                      'watershed.shp')

        result = pygeoprocessing.aggregate_raster_values_uri(
            base_raster_path, shapefile_path)

        expected_result = pygeoprocessing.AggregatedValues(
            total={9999: 398428.0},
            pixel_mean={9999: 1.0},
            hectare_mean={9999: 11.111194773692587},
            n_pixels={9999: 398428.0},
            pixel_min={9999: 1.0},
            pixel_max={9999: 1.0})

        for metric in [
                'total', 'pixel_mean', 'hectare_mean', 'n_pixels', 'pixel_min',
                'pixel_max'
        ]:
            _assert_deep_almost_equal(self,
                                      getattr(expected_result, metric),
                                      getattr(result, metric),
                                      places=6)
    def test_aggregate_raster_values_include_nodata(self):
        """PyGeoprocessing: test aggregate raster values, include nodata."""
        import pygeoprocessing

        base_raster_path = os.path.join(TEST_DATA,
                                        'aggregate_raster_values_data',
                                        'base_raster.tif')

        shapefile_path = os.path.join(TEST_DATA,
                                      'aggregate_raster_values_data',
                                      'overlap_watershed.shp')

        result = pygeoprocessing.aggregate_raster_values_uri(
            base_raster_path,
            shapefile_path,
            shapefile_field='DN',
            all_touched=False,
            polygons_might_overlap=True,
            ignore_nodata=False)

        expected_result = pygeoprocessing.AggregatedValues(
            total={
                1: 3.0,
                2: 398425.0,
                3: 5.0
            },
            pixel_mean={
                1: 1.0,
                2: 1.0,
                3: 0.41666666666666669
            },
            hectare_mean={
                1: 11.111111110950143,
                2: 11.111111110937156,
                3: 3.6282805923682009
            },
            n_pixels={
                1: 3.0,
                2: 398425.0,
                3: 12.0
            },
            pixel_min={
                1: 1.0,
                2: 1.0,
                3: 1.0
            },
            pixel_max={
                1: 1.0,
                2: 1.0,
                3: 1.0
            })

        for metric in [
                'total', 'pixel_mean', 'hectare_mean', 'n_pixels', 'pixel_min',
                'pixel_max'
        ]:
            _assert_deep_almost_equal(self,
                                      getattr(expected_result, metric),
                                      getattr(result, metric),
                                      places=6)