Coverage for tests/testSimpleMetrics.py : 27%

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
6import lsst.sims.maf.metrics as metrics
7import lsst.utils.tests
10class TestSimpleMetrics(unittest.TestCase):
12 def setUp(self):
13 dv = np.arange(0, 10, .5)
14 dv2 = np.arange(-10, 10.25, .5)
15 self.dv = np.array(list(zip(dv)), dtype=[('testdata', 'float')])
16 self.dv2 = np.array(list(zip(dv2)), dtype=[('testdata', 'float')])
18 def testMaxMetric(self):
19 """Test max metric."""
20 testmetric = metrics.MaxMetric('testdata')
21 self.assertEqual(testmetric.run(self.dv), self.dv['testdata'].max())
23 def testMinMetric(self):
24 """Test min metric."""
25 testmetric = metrics.MinMetric('testdata')
26 self.assertEqual(testmetric.run(self.dv), self.dv['testdata'].min())
28 def testMeanMetric(self):
29 """Test mean metric."""
30 testmetric = metrics.MeanMetric('testdata')
31 self.assertEqual(testmetric.run(self.dv), self.dv['testdata'].mean())
33 def testMedianMetric(self):
34 """Test median metric."""
35 testmetric = metrics.MedianMetric('testdata')
36 self.assertEqual(testmetric.run(self.dv), np.median(self.dv['testdata']))
38 def testAbsMedianMetric(self):
39 testmetric = metrics.AbsMedianMetric('testdata')
40 self.assertEqual(testmetric.run(self.dv), np.abs(np.median(self.dv['testdata'])))
42 def testFullRangeMetric(self):
43 """Test full range metric."""
44 testmetric = metrics.FullRangeMetric('testdata')
45 self.assertEqual(testmetric.run(self.dv), self.dv['testdata'].max()-self.dv['testdata'].min())
47 def testCoaddm5Metric(self):
48 """Test coaddm5 metric."""
49 testmetric = metrics.Coaddm5Metric(m5Col='testdata')
50 self.assertEqual(testmetric.run(self.dv), 1.25 * np.log10(np.sum(10.**(.8*self.dv['testdata']))))
52 def testRmsMetric(self):
53 """Test rms metric."""
54 testmetric = metrics.RmsMetric('testdata')
55 self.assertEqual(testmetric.run(self.dv), np.std(self.dv['testdata']))
57 def testSumMetric(self):
58 """Test Sum metric."""
59 testmetric = metrics.SumMetric('testdata')
60 self.assertEqual(testmetric.run(self.dv), self.dv['testdata'].sum())
62 def testCountUniqueMetric(self):
63 """Test CountUniqueMetric"""
64 testmetric = metrics.CountUniqueMetric('testdata')
65 self.assertEqual(testmetric.run(self.dv), np.size(np.unique(self.dv['testdata'])))
66 d2 = self.dv.copy()
67 d2['testdata'][1] = d2['testdata'][0]
68 self.assertEqual(testmetric.run(d2), np.size(np.unique(d2)))
70 def testCountMetric(self):
71 """Test count metric."""
72 testmetric = metrics.CountMetric('testdata')
73 self.assertEqual(testmetric.run(self.dv), np.size(self.dv['testdata']))
75 def testCountRatioMetric(self):
76 """Test countratio metric."""
77 testmetric = metrics.CountRatioMetric('testdata', normVal=2.)
78 self.assertEqual(testmetric.run(self.dv), np.size(self.dv['testdata'])/2.0)
80 def testCountSubsetMetric(self):
81 """Test countsubset metric."""
82 testmetric = metrics.CountSubsetMetric('testdata', subset=0)
83 self.assertEqual(testmetric.run(self.dv), 1)
85 def testMaxPercentMetric(self):
86 testmetric = metrics.MaxPercentMetric('testdata')
87 self.assertEqual(testmetric.run(self.dv), 1.0/len(self.dv)*100.0)
88 self.assertEqual(testmetric.run(self.dv2), 1.0/len(self.dv2)*100.0)
90 def testAbsMaxPercentMetric(self):
91 testmetric = metrics.AbsMaxPercentMetric('testdata')
92 self.assertEqual(testmetric.run(self.dv), 1./len(self.dv)*100.)
93 self.assertEqual(testmetric.run(self.dv2), 2./len(self.dv2)*100.)
95 def testRobustRmsMetric(self):
96 """Test Robust RMS metric."""
97 testmetric = metrics.RobustRmsMetric('testdata')
98 rms_approx = (np.percentile(self.dv['testdata'], 75) - np.percentile(self.dv['testdata'], 25)) / 1.349
99 self.assertEqual(testmetric.run(self.dv), rms_approx)
101 def testFracAboveMetric(self):
102 cutoff = 5.1
103 testmetric = metrics.FracAboveMetric('testdata', cutoff=cutoff)
104 self.assertEqual(testmetric.run(self.dv),
105 np.size(np.where(self.dv['testdata'] >= cutoff)[0])/float(np.size(self.dv)))
106 testmetric = metrics.FracAboveMetric('testdata', cutoff=cutoff, scale=2)
107 self.assertEqual(testmetric.run(self.dv),
108 2.0*np.size(np.where(self.dv['testdata'] >= cutoff)[0])/float(np.size(self.dv)))
110 def testFracBelowMetric(self):
111 cutoff = 5.1
112 testmetric = metrics.FracBelowMetric('testdata', cutoff=cutoff)
113 self.assertEqual(testmetric.run(self.dv),
114 np.size(np.where(self.dv['testdata'] <= cutoff)[0])/float(np.size(self.dv)))
115 testmetric = metrics.FracBelowMetric('testdata', cutoff=cutoff, scale=2)
116 self.assertEqual(testmetric.run(self.dv),
117 2.0*np.size(np.where(self.dv['testdata'] <= cutoff)[0])/float(np.size(self.dv)))
119 def testNoutliersNsigma(self):
120 data = self.dv
121 testmetric = metrics.NoutliersNsigmaMetric('testdata', nSigma=1.)
122 med = np.mean(data['testdata'])
123 shouldBe = np.size(np.where(data['testdata'] > med + data['testdata'].std())[0])
124 self.assertEqual(shouldBe, testmetric.run(data))
125 testmetric = metrics.NoutliersNsigmaMetric('testdata', nSigma=-1.)
126 shouldBe = np.size(np.where(data['testdata'] < med - data['testdata'].std())[0])
127 self.assertEqual(shouldBe, testmetric.run(data))
129 def testMeanAngleMetric(self):
130 """Test mean angle metric."""
131 rng = np.random.RandomState(6573)
132 dv1 = np.arange(0, 32, 2.5)
133 dv2 = (dv1 - 20.0) % 360.
134 dv1 = np.array(list(zip(dv1)), dtype=[('testdata', 'float')])
135 dv2 = np.array(list(zip(dv2)), dtype=[('testdata', 'float')])
136 testmetric = metrics.MeanAngleMetric('testdata')
137 result1 = testmetric.run(dv1)
138 result2 = testmetric.run(dv2)
139 self.assertAlmostEqual(result1, (result2+20)%360.)
140 dv = rng.rand(10000)*360.0
141 dv = dv
142 dv = np.array(list(zip(dv)), dtype=[('testdata', 'float')])
143 result = testmetric.run(dv)
144 result = result
145 self.assertAlmostEqual(result, 180)
147 def testFullRangeAngleMetric(self):
148 """Test full range angle metric."""
149 rng = np.random.RandomState(5422)
150 dv1 = np.arange(0, 32, 2.5)
151 dv2 = (dv1 - 20.0) % 360.
152 dv1 = np.array(list(zip(dv1)), dtype=[('testdata', 'float')])
153 dv2 = np.array(list(zip(dv2)), dtype=[('testdata', 'float')])
154 testmetric = metrics.FullRangeAngleMetric('testdata')
155 result1 = testmetric.run(dv1)
156 result2 = testmetric.run(dv2)
157 self.assertAlmostEqual(result1, result2)
158 dv = np.arange(0, 358, 5)
159 dv = np.array(list(zip(dv)), dtype=[('testdata', 'float')])
160 result = testmetric.run(dv)
161 self.assertAlmostEqual(result, 355)
162 dv = rng.rand(10000)*360.0
163 dv = np.array(list(zip(dv)), dtype=[('testdata', 'float')])
164 result = testmetric.run(dv)
165 result = result
166 self.assertGreater(result, 355)
169class TestMemory(lsst.utils.tests.MemoryTestCase):
170 pass
173def setup_module(module):
174 lsst.utils.tests.init()
177if __name__ == "__main__": 177 ↛ 178line 177 didn't jump to line 178, because the condition on line 177 was never true
178 lsst.utils.tests.init()
179 unittest.main()