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")
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
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)
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]
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"
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
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]
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
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')
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']
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()
def make_dataid(**items): """Make a data id.""" return DataID(local_id_keys_config, **items)
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_')
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")
def test_inequality(self): """Check (in)equality.""" assert DataQuery(wavelength=10) != DataID(self.default_id_keys_config, name="VIS006")
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)