Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1from builtins import zip 

2import matplotlib 

3matplotlib.use("Agg") 

4import numpy as np 

5import unittest 

6from lsst.sims.maf.slicers.uniSlicer import UniSlicer 

7from lsst.sims.maf.slicers.oneDSlicer import OneDSlicer 

8import lsst.utils.tests 

9 

10 

11def makeDataValues(size=100, min=0., max=1., random=-1): 

12 """Generate a simple array of numbers, evenly arranged between min/max, but (optional) random order.""" 

13 datavalues = np.arange(0, size, dtype='float') 

14 datavalues *= (float(max) - float(min)) / (datavalues.max() - datavalues.min()) 

15 datavalues += min 

16 if random > 0: 

17 rng = np.random.RandomState(random) 

18 randorder = rng.rand(size) 

19 randind = np.argsort(randorder) 

20 datavalues = datavalues[randind] 

21 datavalues = np.array(list(zip(datavalues)), dtype=[('testdata', 'float')]) 

22 return datavalues 

23 

24 

25class TestUniSlicerSetupAndSlice(unittest.TestCase): 

26 

27 def setUp(self): 

28 self.testslicer = UniSlicer() 

29 

30 def tearDown(self): 

31 del self.testslicer 

32 self.testslicer = None 

33 

34 def testSlicertype(self): 

35 """Test instantiation of slicer sets slicer type as expected.""" 

36 self.assertEqual(self.testslicer.slicerName, self.testslicer.__class__.__name__) 

37 self.assertEqual(self.testslicer.slicerName, 'UniSlicer') 

38 

39 def testSlicerNbins(self): 

40 self.assertEqual(self.testslicer.nslice, 1) 

41 

42 def testSetupSlicerIndices(self): 

43 """Test slicer returns correct indices (all) after setup. Note this also tests slicing.""" 

44 dvmin = 0 

45 dvmax = 1 

46 nvalues = 1000 

47 dv = makeDataValues(nvalues, dvmin, dvmax, random=672) 

48 self.testslicer.setupSlicer(dv) 

49 # test slicing 

50 self.assertEqual(len(self.testslicer.indices), len(dv['testdata'])) 

51 np.testing.assert_equal(dv[self.testslicer.indices], dv) 

52 

53 

54class TestUniSlicerIteration(unittest.TestCase): 

55 

56 def setUp(self): 

57 self.testslicer = UniSlicer() 

58 

59 def tearDown(self): 

60 del self.testslicer 

61 self.testslicer = None 

62 

63 def testIteration(self): 

64 """Test iteration -- which is a one-step identity op for a unislicer.""" 

65 dvmin = 0 

66 dvmax = 1 

67 nvalues = 1000 

68 dv = makeDataValues(nvalues, dvmin, dvmax, random=432) 

69 self.testslicer.setupSlicer(dv) 

70 for i, b in enumerate(self.testslicer): 

71 pass 

72 self.assertEqual(i, 0) 

73 

74 def testGetItem(self): 

75 """Test that can return an individual indexed values of the slicer.""" 

76 dvmin = 0 

77 dvmax = 1 

78 nvalues = 1000 

79 dv = makeDataValues(nvalues, dvmin, dvmax, random=1192) 

80 self.testslicer.setupSlicer(dv) 

81 self.assertEqual(self.testslicer[0]['slicePoint']['sid'], 0) 

82 

83 

84class TestUniSlicerEqual(unittest.TestCase): 

85 

86 def setUp(self): 

87 self.testslicer = UniSlicer() 

88 dvmin = 0 

89 dvmax = 1 

90 nvalues = 1000 

91 dv = makeDataValues(nvalues, dvmin, dvmax, random=3482) 

92 self.testslicer.setupSlicer(dv) 

93 

94 def tearDown(self): 

95 del self.testslicer 

96 self.testslicer = None 

97 

98 def testEquivalence(self): 

99 """Test equals method.""" 

100 # Note that two uni slicers will be considered equal if they are both the same kind of 

101 # slicer (unislicer). They will not necessarily slice data equally though (the indices are 

102 # not necessarily the same!). 

103 # These should be the same, even though data is not the same. 

104 testslicer2 = UniSlicer() 

105 dv2 = makeDataValues(100, 0, 1, random=43298) 

106 testslicer2.setupSlicer(dv2) 

107 self.assertEqual(self.testslicer, testslicer2) 

108 # these will not be the same, as different slicer type. 

109 testslicer2 = OneDSlicer(sliceColName='testdata', bins=10) 

110 testslicer2.setupSlicer(dv2) 

111 self.assertNotEqual(self.testslicer, testslicer2) 

112 

113 

114class TestMemory(lsst.utils.tests.MemoryTestCase): 

115 pass 

116 

117 

118def setup_module(module): 

119 lsst.utils.tests.init() 

120 

121 

122if __name__ == "__main__": 122 ↛ 123line 122 didn't jump to line 123, because the condition on line 122 was never true

123 lsst.utils.tests.init() 

124 unittest.main()