Coverage for tests/testUniSlicer.py : 32%

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
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
25class TestUniSlicerSetupAndSlice(unittest.TestCase):
27 def setUp(self):
28 self.testslicer = UniSlicer()
30 def tearDown(self):
31 del self.testslicer
32 self.testslicer = None
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')
39 def testSlicerNbins(self):
40 self.assertEqual(self.testslicer.nslice, 1)
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)
54class TestUniSlicerIteration(unittest.TestCase):
56 def setUp(self):
57 self.testslicer = UniSlicer()
59 def tearDown(self):
60 del self.testslicer
61 self.testslicer = None
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)
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)
84class TestUniSlicerEqual(unittest.TestCase):
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)
94 def tearDown(self):
95 del self.testslicer
96 self.testslicer = None
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)
114class TestMemory(lsst.utils.tests.MemoryTestCase):
115 pass
118def setup_module(module):
119 lsst.utils.tests.init()
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()