Exemple #1
0
def test_dataid():
    """Test the DataID object."""
    from satpy.dataset.dataid import DataID, ModifierTuple, ValueList, WavelengthRange

    # Check that enum is translated to type.
    did = make_dataid()
    assert issubclass(did._id_keys['calibration']['type'], ValueList)
    assert 'enum' not in did._id_keys['calibration']

    # Check that None is never a valid value
    did = make_dataid(name='cheese_shops', resolution=None)
    assert 'resolution' not in did
    assert 'None' not in did.__repr__()
    with pytest.raises(ValueError):
        make_dataid(name=None, resolution=1000)

    # Check that defaults are applied correctly
    assert did['modifiers'] == ModifierTuple()

    # Check that from_dict creates a distinct instance...
    did2 = did.from_dict(dict(name='cheese_shops', resolution=None))
    assert did is not did2
    # ...But is equal
    assert did2 == did

    # Check that the instance is immutable
    with pytest.raises(TypeError):
        did['resolution'] = 1000

    # Check that a missing required field crashes
    with pytest.raises(ValueError):
        make_dataid(resolution=1000)

    # Check to_dict
    assert did.to_dict() == dict(name='cheese_shops', modifiers=tuple())

    # Check repr
    did = make_dataid(name='VIS008', resolution=111)
    assert repr(did) == "DataID(name='VIS008', resolution=111, modifiers=())"

    # Check inequality
    default_id_keys_config = {'name': None,
                              'wavelength': {
                                'type': WavelengthRange,
                              },
                              'resolution': None,
                              'calibration': {
                                'enum': [
                                    'reflectance',
                                    'brightness_temperature',
                                    'radiance',
                                    'counts'
                                    ]
                              },
                              'modifiers': {
                                'default': ModifierTuple(),
                                'type': ModifierTuple,
                              },
                              }
    assert DataID(default_id_keys_config, wavelength=10) != DataID(default_id_keys_config, name="VIS006")
Exemple #2
0
    def test_id_filtering(self):
        """Check did filtering."""
        dq = DataQuery(modifiers=tuple(), name='cheese_shops')
        did = DataID(self.default_id_keys_config, name='cheese_shops')
        did2 = DataID(self.default_id_keys_config, name='ni')
        res = dq.filter_dataids([did2, did])
        assert len(res) == 1
        assert res[0] == did

        dataid_container = [
            DataID(self.default_id_keys_config,
                   name='ds1',
                   resolution=250,
                   calibration='reflectance',
                   modifiers=tuple())
        ]
        dq = DataQuery(wavelength=0.22, modifiers=tuple())
        assert len(dq.filter_dataids(dataid_container)) == 0
        dataid_container = [
            DataID(minimal_default_keys_config, name='natural_color')
        ]
        dq = DataQuery(name='natural_color', resolution=250)
        assert len(dq.filter_dataids(dataid_container)) == 1

        dq = make_dsq(wavelength=0.22, modifiers=('mod1', ))
        did = make_cid(name='static_image')
        assert len(dq.filter_dataids([did])) == 0
Exemple #3
0
    def test_compare_no_wl(self):
        """Compare fully qualified wavelength ID to no wavelength ID."""
        from satpy.dataset.dataid import DataID, default_id_keys_config as dikc
        d1 = DataID(dikc, name="a", wavelength=(0.1, 0.2, 0.3))
        d2 = DataID(dikc, name="a", wavelength=None)

        # this happens when sorting IDs during dependency checks
        self.assertFalse(d1 < d2)
        self.assertTrue(d2 < d1)
Exemple #4
0
 def test_sort_dataids_with_different_set_of_keys(self):
     """Check sorting data ids when the query has a different set of keys."""
     dq = DataQuery(name='solar_zenith_angle', calibration='reflectance')
     dids = [DataID(self.default_id_keys_config, name='solar_zenith_angle', resolution=1000, modifiers=()),
             DataID(self.default_id_keys_config, name='solar_zenith_angle', resolution=500, modifiers=()),
             DataID(self.default_id_keys_config, name='solar_zenith_angle', resolution=250, modifiers=())]
     dsids, distances = dq.sort_dataids(dids)
     assert distances[0] < distances[1]
     assert distances[1] < distances[2]
Exemple #5
0
 def test_seviri_hrv_has_priority_over_vis008(self):
     """Check that the HRV channel has priority over VIS008 when querying 0.8µm."""
     dids = [DataID(self.default_id_keys_config, name='HRV',
                    wavelength=WavelengthRange(min=0.5, central=0.7, max=0.9, unit='µm'), resolution=1000.134348869,
                    calibration="reflectance", modifiers=()),
             DataID(self.default_id_keys_config, name='HRV',
                    wavelength=WavelengthRange(min=0.5, central=0.7, max=0.9, unit='µm'), resolution=1000.134348869,
                    calibration="radiance", modifiers=()),
             DataID(self.default_id_keys_config, name='HRV',
                    wavelength=WavelengthRange(min=0.5, central=0.7, max=0.9, unit='µm'), resolution=1000.134348869,
                    calibration="counts", modifiers=()),
             DataID(self.default_id_keys_config, name='VIS006',
                    wavelength=WavelengthRange(min=0.56, central=0.635, max=0.71, unit='µm'),
                    resolution=3000.403165817, calibration="reflectance", modifiers=()),
             DataID(self.default_id_keys_config, name='VIS006',
                    wavelength=WavelengthRange(min=0.56, central=0.635, max=0.71, unit='µm'),
                    resolution=3000.403165817, calibration="radiance", modifiers=()),
             DataID(self.default_id_keys_config, name='VIS006',
                    wavelength=WavelengthRange(min=0.56, central=0.635, max=0.71, unit='µm'),
                    resolution=3000.403165817, calibration="counts", modifiers=()),
             DataID(self.default_id_keys_config, name='VIS008',
                    wavelength=WavelengthRange(min=0.74, central=0.81, max=0.88, unit='µm'),
                    resolution=3000.403165817, calibration="reflectance", modifiers=()),
             DataID(self.default_id_keys_config, name='VIS008',
                    wavelength=WavelengthRange(min=0.74, central=0.81, max=0.88, unit='µm'),
                    resolution=3000.403165817, calibration="radiance", modifiers=()),
             DataID(self.default_id_keys_config, name='VIS008',
                    wavelength=WavelengthRange(min=0.74, central=0.81, max=0.88, unit='µm'),
                    resolution=3000.403165817, calibration="counts", modifiers=())]
     dq = DataQuery(wavelength=0.8)
     res, distances = dq.sort_dataids(dids)
     assert res[0].name == "HRV"
Exemple #6
0
    def test_basic_init(self):
        """Test basic ways of creating a DataID."""
        from satpy.dataset.dataid import (DataID, default_id_keys_config as
                                          dikc, minimal_default_keys_config as
                                          mdkc)

        did = DataID(dikc, name="a")
        assert did['name'] == 'a'
        assert did['modifiers'] == tuple()
        DataID(dikc, name="a", wavelength=0.86)
        DataID(dikc, name="a", resolution=1000)
        DataID(dikc, name="a", calibration='radiance')
        DataID(dikc,
               name="a",
               wavelength=0.86,
               resolution=250,
               calibration='radiance')
        DataID(dikc,
               name="a",
               wavelength=0.86,
               resolution=250,
               calibration='radiance',
               modifiers=('sunz_corrected', ))
        with pytest.raises(ValueError):
            DataID(dikc, wavelength=0.86)
        did = DataID(mdkc, name='comp24', resolution=500)
        assert did['resolution'] == 500
Exemple #7
0
    def test_sort_dataids(self):
        """Check dataid sorting."""
        dq = DataQuery(name='cheese_shops', wavelength=2, modifiers='*')
        did = DataID(self.default_id_keys_config, name='cheese_shops', wavelength=(1, 2, 3))
        did2 = DataID(self.default_id_keys_config, name='cheese_shops', wavelength=(1.1, 2.1, 3.1))
        dsids, distances = dq.sort_dataids([did2, did])
        assert list(dsids) == [did, did2]
        assert np.allclose(distances, [0, 0.1])

        dq = DataQuery(name='cheese_shops')
        did = DataID(self.default_id_keys_config, name='cheese_shops', resolution=200)
        did2 = DataID(self.default_id_keys_config, name='cheese_shops', resolution=400)
        dsids, distances = dq.sort_dataids([did2, did])
        assert list(dsids) == [did, did2]
        assert distances[0] < distances[1]

        did = DataID(self.default_id_keys_config, name='cheese_shops', calibration='counts')
        did2 = DataID(self.default_id_keys_config, name='cheese_shops', calibration='reflectance')
        dsids, distances = dq.sort_dataids([did2, did])
        assert list(dsids) == [did2, did]
        assert distances[0] < distances[1]

        did = DataID(self.default_id_keys_config, name='cheese_shops', modifiers=tuple())
        did2 = DataID(self.default_id_keys_config, name='cheese_shops', modifiers=tuple(['out_of_stock']))
        dsids, distances = dq.sort_dataids([did2, did])
        assert list(dsids) == [did, did2]
        assert distances[0] < distances[1]
Exemple #8
0
def test_dataid_copy():
    """Test copying a DataID."""
    from satpy.dataset.dataid import DataID, default_id_keys_config as dikc
    from copy import deepcopy

    did = DataID(dikc, name="a", resolution=1000)
    did2 = deepcopy(did)
    assert did2 == did
    assert did2.id_keys == did.id_keys
Exemple #9
0
def test_dataid_equal_if_enums_different():
    """Check that dataids with different enums but same items are equal."""
    from satpy.dataset.dataid import DataID, ModifierTuple, WavelengthRange
    id_keys_config1 = {'name': None,
                       'wavelength': {
                           'type': WavelengthRange,
                       },
                       'resolution': None,
                       'calibration': {
                           'enum': [
                               'c1',
                               'c2',
                               'c3',
                           ]
                       },
                       'modifiers': {
                           'default': ModifierTuple(),
                           'type': ModifierTuple,
                       },
                       }

    id_keys_config2 = {'name': None,
                       'wavelength': {
                           'type': WavelengthRange,
                       },
                       'resolution': None,
                       'calibration': {
                           'enum': [
                               'c1',
                               'c1.5',
                               'c2',
                               'c2.5',
                               'c3'
                           ]
                       },
                       'modifiers': {
                           'default': ModifierTuple(),
                           'type': ModifierTuple,
                       },
                       }
    assert DataID(id_keys_config1, name='ni', calibration='c2') == DataID(id_keys_config2, name="ni", calibration='c2')
Exemple #10
0
    def test_create_less_modified_query(self):
        """Test that modifications are popped correctly."""
        from satpy.dataset.dataid import DataID, default_id_keys_config as dikc
        d1 = DataID(dikc, name="a", wavelength=(0.1, 0.2, 0.3), modifiers=('hej',))
        d2 = DataID(dikc, name="a", wavelength=(0.1, 0.2, 0.3), modifiers=tuple())

        assert not d1.create_less_modified_query()['modifiers']
        assert not d2.create_less_modified_query()['modifiers']
Exemple #11
0
    def test_is_modified(self):
        """Test that modifications are detected properly."""
        from satpy.dataset.dataid import DataID, default_id_keys_config as dikc
        d1 = DataID(dikc, name="a", wavelength=(0.1, 0.2, 0.3), modifiers=('hej',))
        d2 = DataID(dikc, name="a", wavelength=(0.1, 0.2, 0.3), modifiers=tuple())

        assert d1.is_modified()
        assert not d2.is_modified()
Exemple #12
0
def make_dataid(**items):
    """Make a data id."""
    return DataID(local_id_keys_config, **items)
Exemple #13
0
 def test_bad_calibration(self):
     """Test that asking for a bad calibration fails."""
     from satpy.dataset.dataid import DataID, default_id_keys_config as dikc
     with pytest.raises(ValueError):
         DataID(dikc, name='C05', calibration='_bad_')
Exemple #14
0
def test_id_query_interactions():
    """Test interactions between DataIDs and DataQuery's."""
    from satpy.dataset.dataid import DataQuery, DataID, WavelengthRange, ModifierTuple, minimal_default_keys_config

    default_id_keys_config = {
        'name': {
            'required': True,
        },
        'wavelength': {
            'type': WavelengthRange,
        },
        'resolution': None,
        'calibration': {
            'enum':
            ['reflectance', 'brightness_temperature', 'radiance', 'counts']
        },
        'modifiers': {
            'default': ModifierTuple(),
            'type': ModifierTuple,
        },
    }

    # Check hash equality
    dq = DataQuery(modifiers=tuple(), name='cheese_shops')
    did = DataID(default_id_keys_config, name='cheese_shops')
    assert hash(dq) == hash(did)

    # Check did filtering
    did2 = DataID(default_id_keys_config, name='ni')
    res = dq.filter_dataids([did2, did])
    assert len(res) == 1
    assert res[0] == did

    dataid_container = [
        DataID(default_id_keys_config,
               name='ds1',
               resolution=250,
               calibration='reflectance',
               modifiers=tuple())
    ]
    dq = DataQuery(wavelength=0.22, modifiers=tuple())
    assert len(dq.filter_dataids(dataid_container)) == 0
    dataid_container = [
        DataID(minimal_default_keys_config, name='natural_color')
    ]
    dq = DataQuery(name='natural_color', resolution=250)
    assert len(dq.filter_dataids(dataid_container)) == 1

    dq = make_dsq(wavelength=0.22, modifiers=('mod1', ))
    did = make_cid(name='static_image')
    assert len(dq.filter_dataids([did])) == 0

    # Check did sorting
    dq = DataQuery(name='cheese_shops', wavelength=2, modifiers='*')
    did = DataID(default_id_keys_config,
                 name='cheese_shops',
                 wavelength=(1, 2, 3))
    did2 = DataID(default_id_keys_config,
                  name='cheese_shops',
                  wavelength=(1.1, 2.1, 3.1))
    dsids, distances = dq.sort_dataids([did2, did])
    assert list(dsids) == [did, did2]
    assert np.allclose(distances, [0, 0.1])

    dq = DataQuery(name='cheese_shops')
    did = DataID(default_id_keys_config, name='cheese_shops', resolution=200)
    did2 = DataID(default_id_keys_config, name='cheese_shops', resolution=400)
    dsids, distances = dq.sort_dataids([did2, did])
    assert list(dsids) == [did, did2]
    assert distances[0] < distances[1]

    did = DataID(default_id_keys_config,
                 name='cheese_shops',
                 calibration='counts')
    did2 = DataID(default_id_keys_config,
                  name='cheese_shops',
                  calibration='reflectance')
    dsids, distances = dq.sort_dataids([did2, did])
    assert list(dsids) == [did2, did]
    assert distances[0] < distances[1]

    did = DataID(default_id_keys_config,
                 name='cheese_shops',
                 modifiers=tuple())
    did2 = DataID(default_id_keys_config,
                  name='cheese_shops',
                  modifiers=tuple(['out_of_stock']))
    dsids, distances = dq.sort_dataids([did2, did])
    assert list(dsids) == [did, did2]
    assert distances[0] < distances[1]

    # Check (in)equality
    assert DataQuery(wavelength=10) != DataID(default_id_keys_config,
                                              name="VIS006")
Exemple #15
0
 def test_inequality(self):
     """Check (in)equality."""
     assert DataQuery(wavelength=10) != DataID(self.default_id_keys_config,
                                               name="VIS006")
Exemple #16
0
 def test_hash_equality(self):
     """Test hash equality."""
     dq = DataQuery(modifiers=tuple(), name='cheese_shops')
     did = DataID(self.default_id_keys_config, name='cheese_shops')
     assert hash(dq) == hash(did)