def test_nonmonotonic_bins(self): """Test median1D failure when provided with a non-monotonic bins """ avg.median1D(self.testInst, [0, 13, 5], self.test_label, self.test_data, auto_bin=False)
def test_bin_data_depth(self): """Test failure when array-like of length 1 is given to median1D """ avg.median1D(self.testInst, 24, self.test_label, self.test_data, auto_bin=False)
def test_median1D_deprecation_warning(self): """Test generation of deprecation warning for median1D""" with warnings.catch_warnings(record=True) as war: try: avg.median1D(None, [0., 360., 24.], 'longitude', ['dummy1']) except ValueError: # Setting inst to None should produce a ValueError after # warning is generated pass assert len(war) >= 1 assert war[0].category == DeprecationWarning
def test_median1D_default(self): """Test success of median1D with default options""" med_dict = avg.median1D(self.testInst, self.test_bins, self.test_label, self.test_data) # Test output type assert isinstance(med_dict, dict) assert len(med_dict.keys()) == len(self.test_data) # Test output keys for kk in med_dict.keys(): assert kk in self.test_data assert np.all([jj in self.out_keys for jj in med_dict[kk].keys()]) # Test output values for jj in self.out_keys[:-1]: assert len(med_dict[kk][jj]) == self.test_bins[-1] assert np.all(med_dict[kk][jj] == self.out_data[kk][jj]) jj = self.out_keys[-1] assert len(med_dict[kk][jj]) == self.test_bins[-1]+1 assert np.all(med_dict[kk][jj] == np.linspace(self.test_bins[0], self.test_bins[1], self.test_bins[2]+1)) del med_dict, kk, jj
def test_constellation_median1D(self): """ Test constellation implementation of 1D median""" for i in self.testC.instruments: i.bounds = self.bounds self.testI.bounds = self.bounds resultsC = avg.median1D(self.testC, [0., 24, 24], 'mlt', ['dummy1', 'dummy2', 'dummy3']) resultsI = avg.median1D(self.testI, [0., 24, 24], 'mlt', ['dummy1', 'dummy2', 'dummy3']) medC1 = resultsC['dummy1']['median'] medI1 = resultsI['dummy1']['median'] medC2 = resultsC['dummy2']['median'] medI2 = resultsI['dummy2']['median'] medC3 = resultsC['dummy3']['median'] medI3 = resultsI['dummy3']['median'] assert np.array_equal(medC1, medI1) assert np.array_equal(medC2, medI2) assert np.array_equal(medC3, medI3)
def test_basic_seasonal_median1D(self): """ Test basic seasonal 1D median""" results = avg.median1D(self.testInst, [0., 24, 24], 'mlt', [self.dname]) # iterate over all # no variation in the median, all values should be the same test_vals = np.arange(50) * 1.2 for i, row in enumerate(results[self.dname]['median']): assert np.all(row == test_vals) for i, row in enumerate(results[self.dname]['avg_abs_dev']): assert np.all(row == 0)
def test_basic_seasonal_1Dmedian(self): """ Test the basic seasonal 1D median""" results = avg.median1D(self.testInst, [0., 24, 24], 'mlt', [self.dname]) # iterate over all # no variation in the median, all values should be the same for i, row in enumerate(results[self.dname]['median']): assert np.all(row['density'] == self.test_vals) assert np.all(row['fraction'] == self.test_fracs) for i, row in enumerate(results[self.dname]['avg_abs_dev']): assert np.all(row['density'] == 0) assert np.all(row['fraction'] == 0)
def test_1D_median(self): """ Test a 1D median calculation with a constellation""" for i in self.testC.instruments: i.bounds = self.bounds results = avg.median1D(self.testC, [0., 24, 24], 'slt', ['uts']) dummy_val = results['uts']['median'] dummy_dev = results['uts']['avg_abs_dev'] dummy_x = results['uts']['bin_x'] # iterate over all x rows # value should be equal to integer value of slt # no variation in the median, all values should be the same check = [] for i, x in enumerate(dummy_x[:-1]): check.append(np.all(dummy_val[i] == x.astype(int))) check.append(np.all(dummy_dev[i] == 0))
def test_heterogenous_constellation_median1D(self): """ Test the seasonal 1D median of a heterogeneous constellation """ for inst in self.testC: inst.bounds = self.bounds results = avg.median1D(self.testC, [0., 24, 24], 'mlt', ['dummy1']) # Extract the results dummy_val = results['dummy1']['median'] dummy_dev = results['dummy1']['avg_abs_dev'] # iterate over all x rows # value should be equal to integer value of mlt # no variation in the median, all values should be the same check = [] for i, x in enumerate(results['dummy1']['bin_x'][:-1]): check.append(np.all(dummy_val[i] == x.astype(int))) check.append(np.all(dummy_dev[i] == 0)) assert np.all(check)
def test_median1D_bad_label(self): """Test failure of median1D with unknown label""" avg.median1D(self.testInst, self.test_bins, "bad_label", self.test_data)
def test_median1D_bad_data(self): """Test failure of median1D with string data instead of list""" avg.median1D(self.testInst, self.test_bins, self.test_label, self.test_data[0])