Example #1
0
class TestReaders(unittest.TestCase):
    """
    Old readers, kept to test backward compatibility
    """
    def setUp(self) -> None:
        filename_format_header_values_root = os.path.join(
            os.path.dirname(__file__), 'test_data', 'format_header_values')
        filename_format_header_values_filepath = os.path.join(
            'SMOSMANIA',
            'SMOSMANIA_SMOSMANIA_Narbonne_sm_0.050000_0.050000_ThetaProbe-ML2X_20070101_20070131.stm'
        )

        self.filehandler_header_values = \
            DataFile(filename_format_header_values_root,
                     filename_format_header_values_filepath)

        filename_format_ceop_sep_root = os.path.join(os.path.dirname(__file__),
                                                     'test_data',
                                                     'format_ceop_sep')
        filename_format_ceop_sep_filepath = os.path.join(
            'SMOSMANIA',
            'SMOSMANIA_SMOSMANIA_Narbonne_sm_0.050000_0.050000_ThetaProbe-ML2X_20070101_20070131.stm'
        )

        self.filehandler_ceop_sep = DataFile(
            filename_format_ceop_sep_root, filename_format_ceop_sep_filepath)

        filename_malformed_root = os.path.join(os.path.dirname(__file__),
                                               'test_data', 'malformed')
        filename_malformed_filepath = os.path.join('mal_formed_file.txt')

        with pytest.raises(IOError):
            DataFile(filename_malformed_root, filename_malformed_filepath)

        self.metadata_ref = {
            'network': 'SMOSMANIA',
            'station': 'Narbonne',
            'latitude': 43.15,
            'longitude': 2.9567,
            'elevation': 112.0,
            'variable': 'soil_moisture',
            'timerange_from': Timestamp(2007, 1, 1, 1),
            'timerange_to': Timestamp(2007, 1, 31, 23),
            'instrument': 'ThetaProbe-ML2X'
        }

        self.metadata_depth_from = 0.05
        self.metadata_depth_to = 0.05

        self.metadata_ref_ceop = dict(self.metadata_ref)
        self.metadata_ref_ceop['depth_from'] = ['multiple']
        self.metadata_ref_ceop['depth_to'] = ['multiple']
        self.metadata_ref_ceop['variable'] = ['ts', 'sm']
        self.metadata_ref_ceop['sensor'] = 'n.s'

    def test_get_info_from_file(self):

        header_elements, _, _, filename_elements = self.filehandler_ceop_sep.get_elements_from_file(
        )

        assert sorted(header_elements) == sorted([
            '2007/01/01', '01:00', '2007/01/01', '01:00', 'SMOSMANIA',
            'SMOSMANIA', 'Narbonne', '43.15000', '2.95670', '112.00', '0.05',
            '0.05', '0.2140', 'U', 'M'
        ])
        assert sorted(filename_elements) == sorted([
            'SMOSMANIA', 'SMOSMANIA', 'Narbonne', 'sm', '0.050000', '0.050000',
            'ThetaProbe-ML2X', '20070101', '20070131.stm'
        ])

    def test_get_metadata_header_values(self):

        metadata, depth = self.filehandler_header_values.get_metadata_header_values(
        )

        for key in metadata.keys():
            assert metadata[key].val == self.metadata_ref[key]
        assert metadata['variable'].depth.start == self.metadata_depth_from
        assert metadata['variable'].depth.end == self.metadata_depth_to

    def test_reader_format_header_values(self):
        filehandler = self.filehandler_header_values

        assert filehandler.metadata['network'].val == 'SMOSMANIA'
        assert filehandler.metadata['station'].val == 'Narbonne'
        assert filehandler.metadata['latitude'].val == 43.15
        assert filehandler.metadata['longitude'].val == 2.9567
        assert filehandler.metadata['elevation'].val == 112.0
        assert filehandler.metadata['variable'].val == 'soil_moisture'
        assert filehandler.metadata['instrument'].depth.start == 0.05
        assert filehandler.metadata['instrument'].depth.end == 0.05
        assert filehandler.metadata['instrument'].val == 'ThetaProbe-ML2X'

        data = filehandler.read_data()
        assert type(data) == pd.DataFrame
        assert data.index[7] == pd.Timestamp('2007-1-1 8:0:0')
        assert sorted(data.columns) == sorted(
            ['soil_moisture', 'soil_moisture_flag', 'soil_moisture_orig_flag'])
        assert data['soil_moisture'].values[8] == 0.2135
        assert data['soil_moisture_flag'].values[8] == 'U'
        assert data['soil_moisture_orig_flag'].values[8] == 'M'

    def test_get_metadata_ceop_sep(self):

        filehandler = self.filehandler_ceop_sep

        metadata, depth = filehandler.get_metadata_ceop_sep()
        for key in metadata.keys():
            assert metadata[key].val == self.metadata_ref[key]
        assert metadata['variable'].depth.start == self.metadata_depth_from
        assert metadata['variable'].depth.end == self.metadata_depth_to

    def test_reader_format_ceop_sep(self):
        filehandler = self.filehandler_ceop_sep

        assert filehandler.metadata['network'].val == 'SMOSMANIA'
        assert filehandler.metadata['station'].val == 'Narbonne'
        assert filehandler.metadata['latitude'].val == 43.15
        assert filehandler.metadata['longitude'].val == 2.9567
        assert filehandler.metadata['elevation'].val == 112.0
        assert filehandler.metadata['variable'].val == 'soil_moisture'
        assert filehandler.metadata['instrument'].depth.start == 0.05
        assert filehandler.metadata['instrument'].depth.end == 0.05
        assert filehandler.metadata['instrument'].val == 'ThetaProbe-ML2X'

        data = filehandler.read_data()
        assert type(data) == pd.DataFrame
        assert data.index[7] == pd.Timestamp('2007-1-1 8:0:0')
        assert sorted(data.columns) == sorted(
            ['soil_moisture', 'soil_moisture_flag', 'soil_moisture_orig_flag'])
        assert data['soil_moisture'].values[8] == 0.2135
        assert data['soil_moisture_flag'].values[8] == 'U'
        assert data['soil_moisture_orig_flag'].values[347] == 'M'

    def test_reader_get_format(self):
        assert self.filehandler_ceop_sep.file_type == 'ceop_sep'
        assert self.filehandler_header_values.file_type == 'header_values'

    def test_get_min_max_from_file(self):
        assert self.filehandler_ceop_sep.metadata['timerange_from'].val ==\
               Timestamp(2007, 1, 1, 1)
        assert self.filehandler_ceop_sep.metadata['timerange_to'].val == \
               Timestamp(2007, 1, 31, 23)

        assert self.filehandler_header_values.metadata['timerange_from'].val ==\
               Timestamp(2007, 1, 1, 1)
        assert self.filehandler_ceop_sep.metadata['timerange_to'].val == \
               Timestamp(2007, 1, 31, 23)
Example #2
0
class TestReaders(unittest.TestCase):
    """
    Old readers, kept to test backward compatibility
    """
    def setUp(self) -> None:
        filename_format_header_values_root = os.path.join(
            os.path.dirname(__file__), "test_data", "format_header_values")
        filename_format_header_values_filepath = os.path.join(
            "SMOSMANIA",
            "SMOSMANIA_SMOSMANIA_Narbonne_sm_0.050000_0.050000_ThetaProbe-ML2X_20070101_20070131.stm",
        )

        self.filehandler_header_values = DataFile(
            filename_format_header_values_root,
            filename_format_header_values_filepath,
        )

        filename_format_ceop_sep_root = os.path.join(os.path.dirname(__file__),
                                                     "test_data",
                                                     "format_ceop_sep")
        filename_format_ceop_sep_filepath = os.path.join(
            "SMOSMANIA",
            "SMOSMANIA_SMOSMANIA_Narbonne_sm_0.050000_0.050000_ThetaProbe-ML2X_20070101_20070131.stm",
        )

        self.filehandler_ceop_sep = DataFile(
            filename_format_ceop_sep_root, filename_format_ceop_sep_filepath)

        filename_malformed_root = os.path.join(os.path.dirname(__file__),
                                               "test_data", "malformed")
        filename_malformed_filepath = os.path.join("mal_formed_file.txt")

        with pytest.raises(IOError):
            DataFile(filename_malformed_root, filename_malformed_filepath)

        self.metadata_ref = {
            "network": "SMOSMANIA",
            "station": "Narbonne",
            "latitude": 43.15,
            "longitude": 2.9567,
            "elevation": 112.0,
            "variable": "soil_moisture",
            "timerange_from": Timestamp(2007, 1, 1, 1),
            "timerange_to": Timestamp(2007, 1, 31, 23),
            "instrument": "ThetaProbe-ML2X",
        }

        self.metadata_depth_from = 0.05
        self.metadata_depth_to = 0.05

        self.metadata_ref_ceop = dict(self.metadata_ref)
        self.metadata_ref_ceop["depth_from"] = ["multiple"]
        self.metadata_ref_ceop["depth_to"] = ["multiple"]
        self.metadata_ref_ceop["variable"] = ["ts", "sm"]
        self.metadata_ref_ceop["sensor"] = "n.s"

    def test_get_info_from_file(self):

        (
            header_elements,
            _,
            _,
            filename_elements,
        ) = self.filehandler_ceop_sep.get_elements_from_file()

        assert sorted(header_elements) == sorted([
            "2007/01/01",
            "01:00",
            "2007/01/01",
            "01:00",
            "SMOSMANIA",
            "SMOSMANIA",
            "Narbonne",
            "43.15000",
            "2.95670",
            "112.00",
            "0.05",
            "0.05",
            "0.2140",
            "U",
            "M",
        ])
        assert sorted(filename_elements) == sorted([
            "SMOSMANIA",
            "SMOSMANIA",
            "Narbonne",
            "sm",
            "0.050000",
            "0.050000",
            "ThetaProbe-ML2X",
            "20070101",
            "20070131.stm",
        ])

    def test_get_metadata_header_values(self):

        (
            metadata,
            depth,
        ) = self.filehandler_header_values.get_metadata_header_values()

        for key in metadata.keys():
            assert metadata[key].val == self.metadata_ref[key]
        assert metadata["variable"].depth.start == self.metadata_depth_from
        assert metadata["variable"].depth.end == self.metadata_depth_to

    def test_reader_format_header_values(self):
        filehandler = self.filehandler_header_values

        assert filehandler.metadata["network"].val == "SMOSMANIA"
        assert filehandler.metadata["station"].val == "Narbonne"
        assert filehandler.metadata["latitude"].val == 43.15
        assert filehandler.metadata["longitude"].val == 2.9567
        assert filehandler.metadata["elevation"].val == 112.0
        assert filehandler.metadata["variable"].val == "soil_moisture"
        assert filehandler.metadata["instrument"].depth.start == 0.05
        assert filehandler.metadata["instrument"].depth.end == 0.05
        assert filehandler.metadata["instrument"].val == "ThetaProbe-ML2X"

        data = filehandler.read_data()
        assert type(data) == pd.DataFrame
        assert data.index[7] == pd.Timestamp("2007-1-1 8:0:0")
        assert sorted(data.columns) == sorted(
            ["soil_moisture", "soil_moisture_flag", "soil_moisture_orig_flag"])
        assert data["soil_moisture"].values[8] == 0.2135
        assert data["soil_moisture_flag"].values[8] == "U"
        assert data["soil_moisture_orig_flag"].values[8] == "M"

    def test_get_metadata_ceop_sep(self):

        filehandler = self.filehandler_ceop_sep

        metadata, depth = filehandler.get_metadata_ceop_sep()
        for key in metadata.keys():
            assert metadata[key].val == self.metadata_ref[key]
        assert metadata["variable"].depth.start == self.metadata_depth_from
        assert metadata["variable"].depth.end == self.metadata_depth_to

    def test_reader_format_ceop_sep(self):
        filehandler = self.filehandler_ceop_sep

        assert filehandler.metadata["network"].val == "SMOSMANIA"
        assert filehandler.metadata["station"].val == "Narbonne"
        assert filehandler.metadata["latitude"].val == 43.15
        assert filehandler.metadata["longitude"].val == 2.9567
        assert filehandler.metadata["elevation"].val == 112.0
        assert filehandler.metadata["variable"].val == "soil_moisture"
        assert filehandler.metadata["instrument"].depth.start == 0.05
        assert filehandler.metadata["instrument"].depth.end == 0.05
        assert filehandler.metadata["instrument"].val == "ThetaProbe-ML2X"

        data = filehandler.read_data()
        assert type(data) == pd.DataFrame
        assert data.index[7] == pd.Timestamp("2007-1-1 8:0:0")
        assert sorted(data.columns) == sorted(
            ["soil_moisture", "soil_moisture_flag", "soil_moisture_orig_flag"])
        assert data["soil_moisture"].values[8] == 0.2135
        assert data["soil_moisture_flag"].values[8] == "U"
        assert data["soil_moisture_orig_flag"].values[347] == "M"

    def test_reader_get_format(self):
        assert self.filehandler_ceop_sep.file_type == "ceop_sep"
        assert self.filehandler_header_values.file_type == "header_values"

    def test_get_min_max_from_file(self):
        assert self.filehandler_ceop_sep.metadata[
            "timerange_from"].val == Timestamp(2007, 1, 1, 1)
        assert self.filehandler_ceop_sep.metadata[
            "timerange_to"].val == Timestamp(2007, 1, 31, 23)

        assert self.filehandler_header_values.metadata[
            "timerange_from"].val == Timestamp(2007, 1, 1, 1)
        assert self.filehandler_ceop_sep.metadata[
            "timerange_to"].val == Timestamp(2007, 1, 31, 23)