def test_calc_solar_local_time(self): """Test calc_solar_local_time""" coords.calc_solar_local_time(self.testInst, lon_name="longitude", slt_name='slt') target = np.array([22.66666667, 23.20027778, 23.92722222, 0.03416667, 0.33444444, 0.65938889]) assert (abs(self.testInst['slt'] - target)).max() < 1.0e-6
def test_bad_lon_name_calc_solar_local_time(self): """Test calc_solar_local_time with a bad longitude name.""" self.py_inst = pysat.Instrument(platform='pysat', name="testing") self.py_inst.load(date=self.inst_time) with pytest.raises(ValueError): coords.calc_solar_local_time(self.py_inst, lon_name="not longitude", slt_name='slt')
def test_calc_solar_local_time_w_update_longitude(self): """Test calc_solar_local_time with update_longitude""" coords.calc_solar_local_time(self.testInst, lon_name="longitude", slt_name='slt') coords.update_longitude(self.testInst, lon_name="longitude") coords.calc_solar_local_time(self.testInst, lon_name="longitude", slt_name='slt2') assert (abs(self.testInst['slt'] - self.testInst['slt2'])).max() < 1.0e-6
def test_lon_broadcasting_calc_solar_local_time(self, name): """Test calc_solar_local_time with longitude coordinates.""" self.py_inst = pysat.Instrument(platform='pysat', name=name) self.py_inst.load(date=self.inst_time) coords.calc_solar_local_time(self.py_inst, lon_name="longitude", slt_name='slt') assert self.py_inst['slt'].max() < 24.0 assert self.py_inst['slt'].min() >= 0.0
def test_lon_broadcasting_calc_solar_local_time_no_mod_multiday( self, name): """Test calc_solar_local_time with longitude coordinates, no mod, 2 days """ self.py_inst = pysat.Instrument(platform='pysat', name=name) self.py_inst.load(date=self.inst_time, end_date=self.inst_time_2) coords.calc_solar_local_time(self.py_inst, lon_name="longitude", slt_name='slt', apply_modulus=False) assert self.py_inst['slt'].max() > 48.0 assert self.py_inst['slt'].max() < 72.0 assert self.py_inst['slt'].min() >= 0.0
def test_calc_solar_local_time_w_neg_longitude(self): """Test calc_solar_local_time with longitudes from -180 to 180 deg""" self.py_inst = pysat.Instrument(platform='pysat', name="testing") self.py_inst.load(date=self.inst_time) coords.calc_solar_local_time(self.py_inst, lon_name="longitude", slt_name='slt') coords.update_longitude(self.py_inst, lon_name="longitude") coords.calc_solar_local_time(self.py_inst, lon_name="longitude", slt_name='slt2') assert (abs(self.py_inst['slt'] - self.py_inst['slt2'])).max() < 1.0e-6
def test_calc_solar_local_time(self, name): """Test calc_solar_local_time with longitudes from 0-360 deg for 0 UTH """ self.py_inst = pysat.Instrument(platform='pysat', name=name, num_samples=1) self.py_inst.load(date=self.inst_time) coords.calc_solar_local_time(self.py_inst, lon_name="longitude", slt_name='slt') # This works because test instrument longitude ranges from 0-360 deg assert (abs(self.py_inst['slt'].values - self.py_inst['longitude'].values / 15.0)).max() < 1.0e-6
def test_calc_solar_local_time_inconsistent_keywords(self, name, caplog): """Test that ref_date only works when apply_modulus=False""" # Instantiate instrument and load data self.py_inst = pysat.Instrument(platform='pysat', name=name, num_samples=1) self.py_inst.load(date=self.inst_time) with caplog.at_level(logging.INFO, logger='pysat'): # Apply solar local time method coords.calc_solar_local_time(self.py_inst, lon_name="longitude", slt_name='slt', ref_date=self.py_inst.date, apply_modulus=True) captured = caplog.text # Confirm we have the correct informational message assert captured.find('Keyword `ref_date` only supported if') >= 0 return
def test_single_lon_calc_solar_local_time(self): """Test calc_solar_local_time with a single longitude value.""" self.py_inst = pysat.Instrument(platform='pysat', name="testing_xarray") self.py_inst.load(date=self.inst_time) lon_name = 'lon2' # Create a second longitude with a single value self.py_inst.data = self.py_inst.data.update( {lon_name: (lon_name, [10.0])}) self.py_inst.data = self.py_inst.data.squeeze(dim=lon_name) # Calculate and test the SLT coords.calc_solar_local_time(self.py_inst, lon_name=lon_name, slt_name='slt') assert self.py_inst['slt'].max() < 24.0 assert self.py_inst['slt'].min() >= 0.0 assert self.py_inst['slt'].shape == self.py_inst.index.shape
def test_bad_lon_name_calc_solar_local_time(self): """Test calc_solar_local_time with a bad longitude name""" coords.calc_solar_local_time(self.testInst, lon_name="not longitude", slt_name='slt')