예제 #1
0
    def test_criteria_excel_file(self):
        """HRA: test excel files read correctly by _get_criteria_dataframe."""
        from natcap.invest.hra import _get_criteria_dataframe

        # Make an info CSV file and read it as a dataframe
        criteria_csv_path = os.path.join(self.workspace_dir, 'criteria.csv')
        _make_criteria_csv(criteria_csv_path,
                           self.workspace_dir,
                           rel_path=True)
        expected_df = _get_criteria_dataframe(criteria_csv_path).astype(str)

        # Since we don't have openpyxl library, use the existing excel file
        # from TEST_DATA folder, and copy it to self.workspace_dir so
        # the function won't raise exceptions about vector or raster files
        # in the table not existing
        criteria_excel_path = os.path.join(TEST_DATA, 'criteria_excel.xlsx')
        copied_criteria_excel_path = os.path.join(self.workspace_dir,
                                                  'criteria_excel.xlsx')
        shutil.copyfile(criteria_excel_path, copied_criteria_excel_path)
        out_df = _get_criteria_dataframe(copied_criteria_excel_path).astype(
            str)

        self.assertTrue(
            out_df.equals(expected_df),
            'The dataframes from criteria CSV and excel files are different.')
예제 #2
0
    def test_missing_criteria_header_from_criteria_csv(self):
        """HRA: correct error message when missing indexes from criteria CSV."""
        from natcap.invest.hra import _get_criteria_dataframe

        # Use a criteria CSV that misses two indexes
        bad_criteria_table_path = os.path.join(self.workspace_dir,
                                               'bad_criteria.csv')
        _make_criteria_csv(bad_criteria_table_path,
                           self.workspace_dir,
                           missing_criteria_header=True)

        with self.assertRaises(ValueError) as cm:
            _get_criteria_dataframe(bad_criteria_table_path)

        expected_message = 'missing the column header "CRITERIA TYPE"'
        actual_message = str(cm.exception)
        self.assertTrue(expected_message in actual_message, actual_message)
예제 #3
0
    def test_missing_index_from_criteria_csv(self):
        """HRA: correct error message when missing indexes from criteria CSV."""
        from natcap.invest.hra import _get_criteria_dataframe

        # Use a criteria CSV that misses two indexes
        bad_criteria_table_path = os.path.join(self.workspace_dir,
                                               'bad_criteria.csv')
        _make_criteria_csv(bad_criteria_table_path,
                           self.workspace_dir,
                           missing_index=True)

        with self.assertRaises(ValueError) as cm:
            _get_criteria_dataframe(bad_criteria_table_path)

        expected_message = (
            "'HABITAT NAME', 'HABITAT STRESSOR OVERLAP PROPERTIES'")
        actual_message = str(cm.exception)
        self.assertTrue(expected_message in actual_message, actual_message)
예제 #4
0
파일: test_hra.py 프로젝트: srcreyes/invest
    def test_missing_index_from_criteria_csv(self):
        """HRA: correct error message when missing indexes from criteria CSV."""
        from natcap.invest.hra import _get_criteria_dataframe

        # Use a criteria CSV that misses two indexes
        bad_criteria_table_path = os.path.join(self.workspace_dir,
                                               'bad_criteria.csv')
        _make_criteria_csv(bad_criteria_table_path,
                           self.workspace_dir,
                           missing_index=True)

        with self.assertRaises(ValueError) as cm:
            _get_criteria_dataframe(bad_criteria_table_path)

        expected_message = ('The Criteria table is missing the following '
                            'value(s) in the first column:')
        actual_message = str(cm.exception)
        self.assertTrue(expected_message in actual_message, actual_message)
예제 #5
0
파일: test_hra.py 프로젝트: phargogh/invest
    def test_unknown_criteria_from_criteria_csv(self):
        """HRA: exception raised with unknown criteria from criteria CSV."""
        from natcap.invest.hra import _get_criteria_dataframe, _get_attributes_from_df

        # Create a criteria CSV that has a criteria row that shows up before
        # any stressors
        bad_criteria_table_path = os.path.join(
            self.workspace_dir, 'bad_criteria.csv')
        _make_criteria_csv(
            bad_criteria_table_path, self.workspace_dir, unknown_criteria=True)

        with self.assertRaises(ValueError) as cm:
            criteria_df = _get_criteria_dataframe(bad_criteria_table_path)
            _get_attributes_from_df(criteria_df, ['habitat_0', 'habitat_1'],
                                    ['stressor_0', 'stressor_1'])

        expected_message = 'The "extra criteria" criteria does not belong to '
        actual_message = str(cm.exception)
        self.assertTrue(expected_message in actual_message, actual_message)
예제 #6
0
파일: test_hra.py 프로젝트: phargogh/invest
    def test_large_rating_from_criteria_csv(self):
        """HRA: exception raised when rating is larger than maximum rating."""
        from natcap.invest.hra import _get_criteria_dataframe, _get_overlap_dataframe

        # Use a criteria CSV that's missing a criteria type
        bad_criteria_table_path = os.path.join(
            self.workspace_dir, 'bad_criteria.csv')
        _make_criteria_csv(
            bad_criteria_table_path, self.workspace_dir, large_rating=True)

        with self.assertRaises(ValueError) as cm:
            criteria_df = _get_criteria_dataframe(bad_criteria_table_path)
            _get_overlap_dataframe(
                criteria_df, ['habitat_0', 'habitat_1'],
                {'stressor_0': ['criteria 3', 'criteria 4'],
                 'stressor_1': ['criteria 5', 'criteria 6']},
                3, self.workspace_dir, self.workspace_dir, '')

        expected_message = 'rating 99999.0 larger than the maximum rating 3'
        actual_message = str(cm.exception)
        self.assertTrue(expected_message in actual_message, actual_message)
예제 #7
0
파일: test_hra.py 프로젝트: phargogh/invest
    def test_missing_criteria_header(self):
        """HRA: exception raised when missing criteria from criteria CSV."""
        from natcap.invest.hra import _get_criteria_dataframe, _get_overlap_dataframe

        # Create a criteria CSV that misses a criteria type
        bad_criteria_table_path = os.path.join(
            self.workspace_dir, 'bad_criteria.csv')
        _make_criteria_csv(
            bad_criteria_table_path, self.workspace_dir, missing_criteria=True)

        with self.assertRaises(ValueError) as cm:
            criteria_df = _get_criteria_dataframe(bad_criteria_table_path)
            _get_overlap_dataframe(
                criteria_df, ['habitat_0', 'habitat_1'],
                {'stressor_0': ['criteria 3', 'criteria 4'],
                 'stressor_1': ['criteria 5', 'criteria 6']},
                3, self.workspace_dir, self.workspace_dir, '')

        expected_message = 'The following stressor-habitat pair(s)'
        actual_message = str(cm.exception)
        self.assertTrue(expected_message in actual_message, actual_message)
예제 #8
0
    def test_wrong_criteria_type_type(self):
        """HRA: exception raised when type is not C or E from criteria CSV."""
        from natcap.invest.hra import _get_criteria_dataframe, _get_overlap_dataframe

        # Use a criteria CSV that's missing a criteria type
        bad_criteria_table_path = os.path.join(self.workspace_dir,
                                               'bad_criteria.csv')
        _make_criteria_csv(bad_criteria_table_path,
                           self.workspace_dir,
                           wrong_criteria_type=True)

        with self.assertRaises(ValueError) as cm:
            criteria_df = _get_criteria_dataframe(bad_criteria_table_path)
            _get_overlap_dataframe(
                criteria_df, ['habitat_0', 'habitat_1'], {
                    'stressor_0': ['criteria 3', 'criteria 4'],
                    'stressor_1': ['criteria 5', 'criteria 6']
                }, 3, self.workspace_dir, self.workspace_dir, '')

        expected_message = 'Criteria Type in the criteria scores table'
        actual_message = str(cm.exception)
        self.assertTrue(expected_message in actual_message, actual_message)
예제 #9
0
파일: test_hra.py 프로젝트: phargogh/invest
    def test_wrong_weight_from_criteria_csv(self):
        """HRA: exception raised when weight is not a number from CSV."""
        from natcap.invest.hra import _get_criteria_dataframe, _get_overlap_dataframe

        # Use a criteria CSV that's missing a criteria type
        bad_criteria_table_path = os.path.join(
            self.workspace_dir, 'bad_criteria.csv')
        _make_criteria_csv(
            bad_criteria_table_path, self.workspace_dir, wrong_weight=True)

        with self.assertRaises(ValueError) as cm:
            criteria_df = _get_criteria_dataframe(bad_criteria_table_path)
            _get_overlap_dataframe(
                criteria_df, ['habitat_0', 'habitat_1'],
                {'stressor_0': ['criteria 3', 'criteria 4'],
                 'stressor_1': ['criteria 5', 'criteria 6']},
                3, self.workspace_dir, self.workspace_dir, '')

        expected_message = (
            'Weight column for habitat "habitat_0" and stressor "stressor_1"')
        actual_message = str(cm.exception)
        self.assertTrue(expected_message in actual_message, actual_message)