diff --git a/scripts/invest-autotest.py b/scripts/invest-autotest.py index 98dd73bbd..96bf51acd 100644 --- a/scripts/invest-autotest.py +++ b/scripts/invest-autotest.py @@ -37,7 +37,7 @@ DATASTACKS = { 'globio': ['globio/globio_demo.invs.json'], 'habitat_quality': ['HabitatQuality/habitat_quality_willamette.invs.json'], 'hra': ['HabitatRiskAssess/hra_wcvi.invs.json'], - 'hydropower_water_yield': ['Annual_Water_Yield/annual_water_yield_gura.invs.json'], + 'annual_water_yield': ['Annual_Water_Yield/annual_water_yield_gura.invs.json'], 'ndr': ['NDR/ndr_gura.invs.json'], 'pollination': ['pollination/pollination_willamette.invs.json'], 'recreation': ['recreation/recreation_andros.invs.json'], diff --git a/setup.py b/setup.py index 3abdf7400..c4a965033 100644 --- a/setup.py +++ b/setup.py @@ -52,7 +52,6 @@ setup( 'natcap.invest.delineateit', 'natcap.invest.finfish_aquaculture', 'natcap.invest.fisheries', - 'natcap.invest.hydropower', 'natcap.invest.ui', 'natcap.invest.ndr', 'natcap.invest.sdr', diff --git a/src/natcap/invest/__init__.py b/src/natcap/invest/__init__.py index bd5a96e14..afadfb742 100644 --- a/src/natcap/invest/__init__.py +++ b/src/natcap/invest/__init__.py @@ -29,6 +29,12 @@ class _MODELMETA: MODEL_METADATA = { + 'annual_water_yield': _MODELMETA( + model_title='Annual Water Yield', + pyname='natcap.invest.annual_water_yield', + gui='annual_water_yield.AnnualWaterYield', + userguide='annual_water_yield.html', + aliases=('hwy',)), 'carbon': _MODELMETA( model_title='Carbon Storage and Sequestration', pyname='natcap.invest.carbon', @@ -99,7 +105,7 @@ MODEL_METADATA = { model_title='GLOBIO', pyname='natcap.invest.globio', gui='globio.GLOBIO', - userguide='../documentation/globio.html', + userguide='globio.html', aliases=()), 'habitat_quality': _MODELMETA( model_title='Habitat Quality', @@ -113,12 +119,6 @@ MODEL_METADATA = { gui='hra.HabitatRiskAssessment', userguide='habitat_risk_assessment.html', aliases=('hra',)), - 'hydropower_water_yield': _MODELMETA( - model_title='Annual Water Yield', - pyname='natcap.invest.hydropower.hydropower_water_yield', - gui='hydropower.HydropowerWaterYield', - userguide='reservoirhydropowerproduction.html', - aliases=('hwy',)), 'ndr': _MODELMETA( model_title='Nutrient Delivery Ratio', pyname='natcap.invest.ndr.ndr', @@ -167,18 +167,18 @@ MODEL_METADATA = { gui='seasonal_water_yield.SeasonalWaterYield', userguide='seasonal_water_yield.html', aliases=('swy',)), - 'wind_energy': _MODELMETA( - model_title='Wind Energy Production', - pyname='natcap.invest.wind_energy', - gui='wind_energy.WindEnergy', - userguide='wind_energy.html', - aliases=()), 'wave_energy': _MODELMETA( model_title='Wave Energy Production', pyname='natcap.invest.wave_energy', gui='wave_energy.WaveEnergy', userguide='wave_energy.html', aliases=()), + 'wind_energy': _MODELMETA( + model_title='Wind Energy Production', + pyname='natcap.invest.wind_energy', + gui='wind_energy.WindEnergy', + userguide='wind_energy.html', + aliases=()), 'urban_flood_risk_mitigation': _MODELMETA( model_title='Urban Flood Risk Mitigation', pyname='natcap.invest.urban_flood_risk_mitigation', diff --git a/src/natcap/invest/hydropower/hydropower_water_yield.py b/src/natcap/invest/annual_water_yield.py similarity index 99% rename from src/natcap/invest/hydropower/hydropower_water_yield.py rename to src/natcap/invest/annual_water_yield.py index 4b10a6add..bf175a82c 100644 --- a/src/natcap/invest/hydropower/hydropower_water_yield.py +++ b/src/natcap/invest/annual_water_yield.py @@ -1,4 +1,4 @@ -"""InVEST Hydropower Water Yield model.""" +"""InVEST Annual Water Yield model.""" import logging import os import math @@ -17,8 +17,8 @@ from .. import MODEL_METADATA LOGGER = logging.getLogger(__name__) ARGS_SPEC = { - "model_name": MODEL_METADATA["hydropower_water_yield"].model_title, - "userguide_html": MODEL_METADATA["hydropower_water_yield"].userguide, + "model_name": MODEL_METADATA["annual_water_yield"].model_title, + "userguide_html": MODEL_METADATA["annual_water_yield"].userguide, "args_with_spatial_overlap": { "spatial_keys": ["depth_to_root_rest_layer_path", "precipitation_path", @@ -189,7 +189,7 @@ ARGS_SPEC = { def execute(args): """Annual Water Yield: Reservoir Hydropower Production. - Executes the hydropower/water_yield model + Executes the hydropower/annual water yield model Args: args['workspace_dir'] (string): a path to the directory that will write diff --git a/src/natcap/invest/hydropower/__init__.py b/src/natcap/invest/hydropower/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/natcap/invest/ui/hydropower.py b/src/natcap/invest/ui/annual_water_yield.py similarity index 95% rename from src/natcap/invest/ui/hydropower.py rename to src/natcap/invest/ui/annual_water_yield.py index 533f906cc..26cc91b22 100644 --- a/src/natcap/invest/ui/hydropower.py +++ b/src/natcap/invest/ui/annual_water_yield.py @@ -1,18 +1,17 @@ # coding=UTF-8 from natcap.invest.ui import model, inputs -from natcap.invest.hydropower import hydropower_water_yield -from natcap.invest import MODEL_METADATA +from natcap.invest import annual_water_yield, MODEL_METADATA -class HydropowerWaterYield(model.InVESTModel): +class AnnualWaterYield(model.InVESTModel): def __init__(self): model.InVESTModel.__init__( self, - label=MODEL_METADATA['hydropower_water_yield'].model_title, - target=hydropower_water_yield.execute, - validator=hydropower_water_yield.validate, - localdoc=MODEL_METADATA['hydropower_water_yield'].userguide) + label=MODEL_METADATA['annual_water_yield'].model_title, + target=annual_water_yield.execute, + validator=annual_water_yield.validate, + localdoc=MODEL_METADATA['annual_water_yield'].userguide) self.precipitation = inputs.File( args_key='precipitation_path', diff --git a/tests/test_hydropower.py b/tests/test_annual_water_yield.py similarity index 84% rename from tests/test_hydropower.py rename to tests/test_annual_water_yield.py index e6827f3f9..562cc1234 100644 --- a/tests/test_hydropower.py +++ b/tests/test_annual_water_yield.py @@ -1,4 +1,4 @@ -"""Module for Regression Testing the InVEST Hydropower module.""" +"""Module for Regression Testing the InVEST Annual Water Yield module.""" import unittest import tempfile import shutil @@ -8,15 +8,14 @@ import pandas import numpy import pygeoprocessing -SAMPLE_DATA = os.path.join( - os.path.dirname(__file__), '..', 'data', 'invest-test-data', 'hydropower', - 'input') + REGRESSION_DATA = os.path.join( - os.path.dirname(__file__), '..', 'data', 'invest-test-data', 'hydropower') + os.path.dirname(__file__), '..', 'data', 'invest-test-data', 'annual_water_yield') +SAMPLE_DATA = os.path.join(REGRESSION_DATA, 'input') -class HydropowerTests(unittest.TestCase): - """Regression Tests for Annual Water Yield Hydropower Model.""" +class AnnualWaterYieldTests(unittest.TestCase): + """Regression Tests for Annual Water Yield Model.""" def setUp(self): """Overriding setUp func. to create temporary workspace directory.""" @@ -50,9 +49,9 @@ class HydropowerTests(unittest.TestCase): def test_invalid_lulc_veg(self): """Hydro: catching invalid LULC_veg values.""" - from natcap.invest.hydropower import hydropower_water_yield + from natcap.invest.annual_water_yield import annual_water_yield - args = HydropowerTests.generate_base_args(self.workspace_dir) + args = AnnualWaterYieldTests.generate_base_args(self.workspace_dir) new_lulc_veg_path = os.path.join(self.workspace_dir, 'new_lulc_veg.csv') @@ -63,7 +62,7 @@ class HydropowerTests(unittest.TestCase): args['biophysical_table_path'] = new_lulc_veg_path with self.assertRaises(ValueError) as cm: - hydropower_water_yield.execute(args) + annual_water_yield.execute(args) self.assertTrue('veg value must be either 1 or 0' in str(cm.exception)) table_df = pandas.read_csv(args['biophysical_table_path']) @@ -72,14 +71,14 @@ class HydropowerTests(unittest.TestCase): args['biophysical_table_path'] = new_lulc_veg_path with self.assertRaises(ValueError) as cm: - hydropower_water_yield.execute(args) + annual_water_yield.execute(args) self.assertTrue('veg value must be either 1 or 0' in str(cm.exception)) def test_missing_lulc_value(self): """Hydro: catching missing LULC value in Biophysical table.""" - from natcap.invest.hydropower import hydropower_water_yield + from natcap.invest.annual_water_yield import annual_water_yield - args = HydropowerTests.generate_base_args(self.workspace_dir) + args = AnnualWaterYieldTests.generate_base_args(self.workspace_dir) # remove a row from the biophysical table so that lulc value is missing bad_biophysical_path = os.path.join( @@ -93,16 +92,16 @@ class HydropowerTests(unittest.TestCase): args['biophysical_table_path'] = bad_biophysical_path with self.assertRaises(ValueError) as cm: - hydropower_water_yield.execute(args) + annual_water_yield.execute(args) self.assertTrue( "The missing values found in the LULC raster but not the table" " are: [2]" in str(cm.exception)) def test_missing_lulc_demand_value(self): """Hydro: catching missing LULC value in Demand table.""" - from natcap.invest.hydropower import hydropower_water_yield + from natcap.invest.annual_water_yield import annual_water_yield - args = HydropowerTests.generate_base_args(self.workspace_dir) + args = AnnualWaterYieldTests.generate_base_args(self.workspace_dir) args['demand_table_path'] = os.path.join( SAMPLE_DATA, 'water_demand_table.csv') @@ -121,21 +120,21 @@ class HydropowerTests(unittest.TestCase): args['demand_table_path'] = bad_demand_path with self.assertRaises(ValueError) as cm: - hydropower_water_yield.execute(args) + annual_water_yield.execute(args) self.assertTrue( "The missing values found in the LULC raster but not the table" " are: [2]" in str(cm.exception)) def test_water_yield_subshed(self): """Hydro: testing water yield component only w/ subwatershed.""" - from natcap.invest.hydropower import hydropower_water_yield + from natcap.invest.annual_water_yield import annual_water_yield from natcap.invest import utils - args = HydropowerTests.generate_base_args(self.workspace_dir) + args = AnnualWaterYieldTests.generate_base_args(self.workspace_dir) args['sub_watersheds_path'] = os.path.join( SAMPLE_DATA, 'subwatersheds.shp') args['results_suffix'] = 'test' - hydropower_water_yield.execute(args) + annual_water_yield.execute(args) raster_results = ['aet_test.tif', 'fractp_test.tif', 'wyield_test.tif'] for raster_path in raster_results: @@ -169,16 +168,16 @@ class HydropowerTests(unittest.TestCase): def test_scarcity_subshed(self): """Hydro: testing Scarcity component w/ subwatershed.""" - from natcap.invest.hydropower import hydropower_water_yield + from natcap.invest.annual_water_yield import annual_water_yield from natcap.invest import utils - args = HydropowerTests.generate_base_args(self.workspace_dir) + args = AnnualWaterYieldTests.generate_base_args(self.workspace_dir) args['demand_table_path'] = os.path.join( SAMPLE_DATA, 'water_demand_table.csv') args['sub_watersheds_path'] = os.path.join( SAMPLE_DATA, 'subwatersheds.shp') - hydropower_water_yield.execute(args) + annual_water_yield.execute(args) raster_results = ['aet.tif', 'fractp.tif', 'wyield.tif'] for raster_path in raster_results: @@ -207,10 +206,10 @@ class HydropowerTests(unittest.TestCase): def test_valuation_subshed(self): """Hydro: testing Valuation component w/ subwatershed.""" - from natcap.invest.hydropower import hydropower_water_yield + from natcap.invest.annual_water_yield import annual_water_yield from natcap.invest import utils - args = HydropowerTests.generate_base_args(self.workspace_dir) + args = AnnualWaterYieldTests.generate_base_args(self.workspace_dir) args['demand_table_path'] = os.path.join( SAMPLE_DATA, 'water_demand_table.csv') args['valuation_table_path'] = os.path.join( @@ -218,7 +217,7 @@ class HydropowerTests(unittest.TestCase): args['sub_watersheds_path'] = os.path.join( SAMPLE_DATA, 'subwatersheds.shp') - hydropower_water_yield.execute(args) + annual_water_yield.execute(args) raster_results = ['aet.tif', 'fractp.tif', 'wyield.tif'] for raster_path in raster_results: @@ -247,33 +246,33 @@ class HydropowerTests(unittest.TestCase): def test_validation(self): """Hydro: test failure cases on the validation function.""" - from natcap.invest.hydropower import hydropower_water_yield + from natcap.invest.annual_water_yield import annual_water_yield - args = HydropowerTests.generate_base_args(self.workspace_dir) + args = AnnualWaterYieldTests.generate_base_args(self.workspace_dir) # default args should be fine - self.assertEqual(hydropower_water_yield.validate(args), []) + self.assertEqual(annual_water_yield.validate(args), []) args_bad_vector = args.copy() args_bad_vector['watersheds_path'] = args_bad_vector['eto_path'] - bad_vector_list = hydropower_water_yield.validate(args_bad_vector) + bad_vector_list = annual_water_yield.validate(args_bad_vector) self.assertTrue('not be opened as a GDAL vector' in bad_vector_list[0][1]) args_bad_raster = args.copy() args_bad_raster['eto_path'] = args_bad_raster['watersheds_path'] - bad_raster_list = hydropower_water_yield.validate(args_bad_raster) + bad_raster_list = annual_water_yield.validate(args_bad_raster) self.assertTrue('not be opened as a GDAL raster' in bad_raster_list[0][1]) args_bad_file = args.copy() args_bad_file['eto_path'] = 'non_existant_file.tif' - bad_file_list = hydropower_water_yield.validate(args_bad_file) + bad_file_list = annual_water_yield.validate(args_bad_file) self.assertTrue('File not found' in bad_file_list[0][1]) args_missing_key = args.copy() del args_missing_key['eto_path'] - validation_warnings = hydropower_water_yield.validate( + validation_warnings = annual_water_yield.validate( args_missing_key) self.assertEqual( validation_warnings, @@ -296,7 +295,7 @@ class HydropowerTests(unittest.TestCase): args_bad_biophysical_table['biophysical_table_path'] = ( bad_biophysical_path) with self.assertRaises(ValueError) as cm: - hydropower_water_yield.execute(args_bad_biophysical_table) + annual_water_yield.execute(args_bad_biophysical_table) actual_message = str(cm.exception) self.assertTrue( "The missing values found in the LULC raster but not the table" @@ -335,7 +334,7 @@ class HydropowerTests(unittest.TestCase): # ensure that a missing watershed id the valuation table will # raise an exception that's helpful with self.assertRaises(ValueError) as cm: - hydropower_water_yield.execute(args_bad_demand_table) + annual_water_yield.execute(args_bad_demand_table) actual_message = str(cm.exception) self.assertTrue( "The missing values found in the LULC raster but not the table" @@ -362,7 +361,7 @@ class HydropowerTests(unittest.TestCase): break with self.assertRaises(ValueError) as cm: - hydropower_water_yield.execute(args_bad_valuation_table) + annual_water_yield.execute(args_bad_valuation_table) actual_message = str(cm.exception) self.assertTrue( 'but are not found in the valuation table' in diff --git a/tests/test_translations/locales/en/LC_MESSAGES/messages.mo b/tests/test_translations/locales/en/LC_MESSAGES/messages.mo new file mode 100644 index 000000000..bfaffdde1 Binary files /dev/null and b/tests/test_translations/locales/en/LC_MESSAGES/messages.mo differ