class TestOpsimFieldSlicerPlotting(unittest.TestCase): def setUp(self): rng = np.random.RandomState(65332) self.testslicer = OpsimFieldSlicer() self.fieldData = makeFieldData() self.simData = makeDataValues(self.fieldData, random=462) self.testslicer.setupSlicer(self.simData, self.fieldData) self.metricdata = ma.MaskedArray(data=np.zeros(len(self.testslicer), dtype='float'), mask=np.zeros(len(self.testslicer), 'bool'), fill_value=self.testslicer.badval) for i, s in enumerate(self.testslicer): idxs = s['idxs'] if len(idxs) > 0: self.metricdata.data[i] = np.mean( self.simData['testdata'][idxs]) else: self.metricdata.mask[i] = True self.metricdata2 = ma.MaskedArray(data=rng.rand(len(self.testslicer)), mask=np.zeros( len(self.testslicer), 'bool'), fill_value=self.testslicer.badval) def tearDown(self): del self.testslicer self.testslicer = None
class TestOpsimFieldSlicerPlotting(unittest.TestCase): def setUp(self): rng = np.random.RandomState(65332) self.testslicer = OpsimFieldSlicer() self.fieldData = makeFieldData() self.simData = makeDataValues(self.fieldData, random=462) self.testslicer.setupSlicer(self.simData, self.fieldData) self.metricdata = ma.MaskedArray(data=np.zeros(len(self.testslicer), dtype='float'), mask=np.zeros(len(self.testslicer), 'bool'), fill_value=self.testslicer.badval) for i, s in enumerate(self.testslicer): idxs = s['idxs'] if len(idxs) > 0: self.metricdata.data[i] = np.mean(self.simData['testdata'][idxs]) else: self.metricdata.mask[i] = True self.metricdata2 = ma.MaskedArray(data=rng.rand(len(self.testslicer)), mask=np.zeros(len(self.testslicer), 'bool'), fill_value=self.testslicer.badval) def tearDown(self): del self.testslicer self.testslicer = None
class TestOpsimFieldSlicerSlicing(unittest.TestCase): # Note that this is really testing baseSpatialSlicer, as slicing is done there for healpix grid def setUp(self): self.testslicer = OpsimFieldSlicer() self.fieldData = makeFieldData() self.simData = makeDataValues(self.fieldData, random=98) def tearDown(self): del self.testslicer self.testslicer = None def testSlicing(self): """Test slicing returns (all) data points which match fieldId values.""" # Test that slicing fails before setupBinner self.assertRaises(NotImplementedError, self.testslicer._sliceSimData, 0) # Set up slicer. self.testslicer.setupSlicer(self.simData, self.fieldData) for s in self.testslicer: didxs = np.where(self.simData['fieldId'] == s['slicePoint']['sid']) binidxs = s['idxs'] self.assertEqual(len(binidxs), len(didxs[0])) if len(binidxs) > 0: didxs = np.sort(didxs[0]) binidxs = np.sort(binidxs) np.testing.assert_equal(self.simData['testdata'][didxs], self.simData['testdata'][binidxs])
def testSlicerEquivalence(self): """Test that slicers are marked equal when appropriate, and unequal when appropriate.""" # Note that opsimfield slicers are considered 'equal' when all fieldId's, RA and Decs match. testslicer2 = OpsimFieldSlicer() fieldData2 = np.copy(self.fieldData) testslicer2.setupSlicer(self.simData, fieldData2) # These slicers should be equal. self.assertTrue(self.testslicer == testslicer2) self.assertFalse(self.testslicer != testslicer2) # These slicers should not be equal. fieldData2['fieldId'] = fieldData2['fieldId'] + 1 testslicer2.setupSlicer(self.simData, fieldData2) self.assertTrue(self.testslicer != testslicer2) self.assertFalse(self.testslicer == testslicer2) # Test a slicer that is not the same kind. testslicer2 = UniSlicer() self.assertNotEqual(self.testslicer, testslicer2) # Test slicers that haven't been setup ts1 = OpsimFieldSlicer() ts2 = OpsimFieldSlicer() self.assertTrue(ts1 == ts2) self.assertFalse(ts1 != ts2) # Set up one with an odd value. ts2 = OpsimFieldSlicer(fieldRaColName='WackyName') self.assertTrue(ts1 != ts2) self.assertFalse(ts1 == ts2)
class TestOpsimFieldSlicerWarning(unittest.TestCase): def setUp(self): self.testslicer = OpsimFieldSlicer() self.fieldData = makeFieldData() self.simData = makeDataValues(self.fieldData) def tearDown(self): del self.testslicer self.testslicer = None def testWarning(self): self.testslicer.setupSlicer(self.simData, self.fieldData) with warnings.catch_warnings(record=True) as w: self.testslicer.setupSlicer(self.simData, self.fieldData) self.assertEqual(len(w), 1) self.assertIn("Re-setting up an OpsimFieldSlicer", str(w[-1].message))
class TestOpsimFieldSlicerIteration(unittest.TestCase): def setUp(self): self.testslicer = OpsimFieldSlicer(latLonDeg=True) self.fieldData = makeFieldData() self.simData = makeDataValues(self.fieldData, random=776221) self.testslicer.setupSlicer(self.simData, self.fieldData) def tearDown(self): del self.testslicer self.testslicer = None def testIteration(self): """Test iteration goes through expected range and ra/dec are in expected range (radians).""" for fid, ra, dec, s in zip(self.fieldData['fieldId'], np.radians(self.fieldData['fieldRA']), np.radians(self.fieldData['fieldDec']), self.testslicer): self.assertEqual(fid, s['slicePoint']['sid']) self.assertEqual(ra, s['slicePoint']['ra']) self.assertEqual(dec, s['slicePoint']['dec']) self.assertGreaterEqual(s['slicePoint']['sid'], 0) self.assertLessEqual(s['slicePoint']['ra'], 2 * np.pi) self.assertGreaterEqual(s['slicePoint']['dec'], -np.pi) self.assertLessEqual(s['slicePoint']['dec'], np.pi) def testGetItem(self): """Test getting indexed value.""" for i, s in enumerate(self.testslicer): dict1 = s dict2 = self.testslicer[i] np.testing.assert_array_equal(dict1['idxs'], dict2['idxs']) self.assertDictEqual(dict1['slicePoint'], dict2['slicePoint']) n = 0 self.assertEqual(self.testslicer[n]['slicePoint']['sid'], self.fieldData['fieldId'][n]) self.assertEqual(self.testslicer[n]['slicePoint']['ra'], np.radians(self.fieldData['fieldRA'][n])) self.assertEqual(self.testslicer[n]['slicePoint']['dec'], np.radians(self.fieldData['fieldDec'][n])) n = len(self.testslicer) - 1 self.assertEqual(self.testslicer[n]['slicePoint']['sid'], self.fieldData['fieldId'][n]) self.assertEqual(self.testslicer[n]['slicePoint']['ra'], np.radians(self.fieldData['fieldRA'][n])) self.assertEqual(self.testslicer[n]['slicePoint']['dec'], np.radians(self.fieldData['fieldDec'][n]))
class TestOpsimFieldSlicerSetup(unittest.TestCase): def setUp(self): self.testslicer = OpsimFieldSlicer() self.fieldData = makeFieldData() self.simData = makeDataValues(self.fieldData) def tearDown(self): del self.testslicer self.testslicer = None def testSlicertype(self): """Test instantiation of slicer sets slicer type as expected.""" self.assertEqual(self.testslicer.slicerName, self.testslicer.__class__.__name__) self.assertEqual(self.testslicer.slicerName, 'OpsimFieldSlicer') def testSlicerNbins(self): """Test that generate expected number of bins for a given set of fields.""" self.assertEqual(self.testslicer.nslice, None) self.testslicer.setupSlicer(self.simData, self.fieldData) self.assertEqual(self.testslicer.nslice, len(self.fieldData['fieldID']))
class TestOpsimFieldSlicerIteration(unittest.TestCase): def setUp(self): self.testslicer = OpsimFieldSlicer(latLonDeg=True) self.fieldData = makeFieldData() self.simData = makeDataValues(self.fieldData, random=776221) self.testslicer.setupSlicer(self.simData, self.fieldData) def tearDown(self): del self.testslicer self.testslicer = None def testIteration(self): """Test iteration goes through expected range and ra/dec are in expected range (radians).""" for fid, ra, dec, s in zip(self.fieldData['fieldId'], np.radians(self.fieldData['fieldRA']), np.radians(self.fieldData['fieldDec']), self.testslicer): self.assertEqual(fid, s['slicePoint']['sid']) self.assertEqual(ra, s['slicePoint']['ra']) self.assertEqual(dec, s['slicePoint']['dec']) self.assertGreaterEqual(s['slicePoint']['sid'], 0) self.assertLessEqual(s['slicePoint']['ra'], 2*np.pi) self.assertGreaterEqual(s['slicePoint']['dec'], -np.pi) self.assertLessEqual(s['slicePoint']['dec'], np.pi) def testGetItem(self): """Test getting indexed value.""" for i, s in enumerate(self.testslicer): dict1 = s dict2 = self.testslicer[i] np.testing.assert_array_equal(dict1['idxs'], dict2['idxs']) self.assertDictEqual(dict1['slicePoint'], dict2['slicePoint']) n = 0 self.assertEqual(self.testslicer[n]['slicePoint']['sid'], self.fieldData['fieldId'][n]) self.assertEqual(self.testslicer[n]['slicePoint']['ra'], np.radians(self.fieldData['fieldRA'][n])) self.assertEqual(self.testslicer[n]['slicePoint']['dec'], np.radians(self.fieldData['fieldDec'][n])) n = len(self.testslicer) - 1 self.assertEqual(self.testslicer[n]['slicePoint']['sid'], self.fieldData['fieldId'][n]) self.assertEqual(self.testslicer[n]['slicePoint']['ra'], np.radians(self.fieldData['fieldRA'][n])) self.assertEqual(self.testslicer[n]['slicePoint']['dec'], np.radians(self.fieldData['fieldDec'][n]))