예제 #1
0
    def test_validation_invalid_init_recruits(self):
        """Fisheries: Validate negative initial recruits value."""
        from natcap.invest.fisheries import fisheries
        args = {'total_init_recruits': -100}

        validation_warnings = fisheries.validate(
            args, limit_to='total_init_recruits')
        self.assertEqual(len(validation_warnings), 1)
        self.assertTrue('must be positive' in validation_warnings[0][1])
예제 #2
0
    def test_validation_invalid_batch(self):
        """Fisheries: Validate batch-processing option."""
        from natcap.invest.fisheries import fisheries
        args = {'do_batch': 'foo'}

        validation_warnings = fisheries.validate(args, limit_to='do_batch')
        self.assertEqual(len(validation_warnings), 1)
        self.assertTrue(
            'must be either True or False' in validation_warnings[0][1])
예제 #3
0
    def test_validation_invalid_pop_csv(self):
        """Fisheries: Validate population CSV."""
        from natcap.invest.fisheries import fisheries
        args = {'population_csv_path': 'foo'}

        validation_warnings = fisheries.validate(
            args, limit_to='population_csv_path')
        self.assertEqual(len(validation_warnings), 1)
        self.assertTrue('File not found' in validation_warnings[0][1])
예제 #4
0
    def test_validation_invalid_aoi(self):
        """Fisheries: Validate AOI vector."""
        from natcap.invest.fisheries import fisheries
        args = {'aoi_vector_path': 'not a vector'}

        validation_warnings = fisheries.validate(args,
                                                 limit_to='aoi_vector_path')
        self.assertEqual(len(validation_warnings), 1)
        self.assertTrue('File not found' in validation_warnings[0][1])
예제 #5
0
 def test_validation_batch(self):
     """Fisheries: Batch parameters (full model validation)."""
     from natcap.invest.fisheries import fisheries
     # Lobster args should be valid, has migration and validation portions
     # enabled.
     args = {
         u'alpha':
         5.77e6,
         u'aoi_vector_path':
         os.path.join(SAMPLE_DATA, 'shapefile_belize',
                      'Lob_Belize_Subregions.shp'),
         u'beta':
         2.885e6,
         u'do_batch':
         False,
         u'harvest_units':
         'Weight',
         u'migr_cont':
         True,
         u'migration_dir':
         os.path.join(SAMPLE_DATA, 'input_lobster', 'Migrations'),
         u'population_csv_path':
         os.path.join(SAMPLE_DATA, 'input_lobster',
                      'population_params.csv'),
         u'population_type':
         'Age-Based',
         u'recruitment_type':
         'Beverton-Holt',
         u'sexsp':
         'No',
         u'spawn_units':
         'Weight',
         u'total_init_recruits':
         1e5,
         u'total_recur_recruits':
         2.16e11,
         u'total_timesteps':
         100,
         u'val_cont':
         True,
         u'frac_post_process':
         0.28633258,
         u'unit_price':
         29.93,
         u'workspace_dir':
         self.workspace_dir,
     }
     validation_warnings = fisheries.validate(args)
     self.assertEqual(len(validation_warnings), 0)
예제 #6
0
 def test_validation(self):
     """Fisheries: Full validation."""
     from natcap.invest.fisheries import fisheries
     args = {
         u'alpha':
         6050000.0,
         u'aoi_vector_path':
         os.path.join(SAMPLE_DATA, 'shapefile_galveston',
                      'Galveston_Subregion.shp'),
         u'beta':
         4.14e-08,
         u'do_batch':
         False,
         u'harvest_units':
         'Weight',
         u'migr_cont':
         False,
         u'population_csv_path':
         os.path.join(SAMPLE_DATA, 'input_shrimp', 'population_params.csv'),
         u'population_type':
         'Stage-Based',
         u'recruitment_type':
         'Fixed',
         u'sexsp':
         'No',
         u'spawn_units':
         '',  # should have a value
         u'total_init_recruits':
         1e5,
         u'total_recur_recruits':
         2.16e11,
         u'total_timesteps':
         300,
         u'val_cont':
         False,
         u'results_suffix':
         'foo',
         u'workspace_dir':
         self.workspace_dir,
     }
     validation_warnings = fisheries.validate(args)
     self.assertEqual(len(validation_warnings), 2)
     self.assertTrue('must have a value' in validation_warnings[0][1])
     self.assertTrue(
         'must be one of Individuals, Weight' in validation_warnings[1][1])
예제 #7
0
    def test_validation_invalid_aoi_fields(self):
        """Fisheries: Validate AOI fields."""
        from natcap.invest.fisheries import fisheries

        args = {
            'aoi_vector_path': os.path.join(self.workspace_dir, 'aoi.gpkg')
        }
        gpkg_driver = gdal.GetDriverByName('GPKG')
        vector = gpkg_driver.Create(args['aoi_vector_path'], 0, 0, 0,
                                    gdal.GDT_Unknown)
        # Layer has no fields in it.
        layer = vector.CreateLayer('new_layer')

        layer = None
        vector = None

        validation_warnings = fisheries.validate(args,
                                                 limit_to='aoi_vector_path')
        self.assertEqual(len(validation_warnings), 1)
        self.assertTrue(
            'column name "Name" is missing' in validation_warnings[0][1])