Coverage for tests/test_measurementset.py: 17%
71 statements
« prev ^ index » next coverage.py v7.2.5, created at 2023-05-19 09:09 +0000
« prev ^ index » next coverage.py v7.2.5, created at 2023-05-19 09:09 +0000
1# This file is part of verify.
2#
3# Developed for the LSST Data Management System.
4# This product includes software developed by the LSST Project
5# (https://www.lsst.org).
6# See the COPYRIGHT file at the top-level directory of this distribution
7# for details of code ownership.
8#
9# This program is free software: you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation, either version 3 of the License, or
12# (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU General Public License for more details.
18#
19# You should have received a copy of the GNU General Public License
20# along with this program. If not, see <https://www.gnu.org/licenses/>.
22import os
23import unittest
25import astropy.units as u
27from lsst.verify import MeasurementSet, Measurement, MetricSet, Name
30class MeasurementSetTestCase(unittest.TestCase):
32 def setUp(self):
33 """Use YAML in data/metrics for metric definitions."""
34 self.metrics_yaml_dirname = os.path.join(
35 os.path.dirname(__file__), 'data')
36 self.metric_set = MetricSet.load_metrics_package(
37 self.metrics_yaml_dirname)
39 self.pa1_meas = Measurement(
40 self.metric_set['testing.PA1'],
41 4. * u.mmag
42 )
43 self.am1_meas = Measurement(
44 self.metric_set['testing.AM1'],
45 2. * u.marcsec
46 )
47 self.pa2_meas = Measurement(
48 self.metric_set['testing.PA2'],
49 10. * u.mmag
50 )
52 def test_measurement_set(self):
53 meas_set = MeasurementSet([self.pa1_meas])
54 self.assertEqual(len(meas_set), 1)
55 self.assertIn('testing.PA1', meas_set)
56 self.assertIs(self.pa1_meas, meas_set['testing.PA1'])
57 self.assertNotIn('testing.AM1', meas_set)
59 # add an inconsistently labelled measurement
60 with self.assertRaises(KeyError):
61 meas_set['testing.AMx'] = self.am1_meas
63 # Add measurement by key
64 meas_set[self.am1_meas.metric_name] = self.am1_meas
65 self.assertEqual(len(meas_set), 2)
66 self.assertIn('testing.AM1', meas_set)
67 self.assertIs(self.am1_meas, meas_set['testing.AM1'])
69 # Insert measurement
70 meas_set.insert(self.pa2_meas)
71 self.assertEqual(len(meas_set), 3)
72 self.assertIn('testing.PA2', meas_set)
73 self.assertIs(self.pa2_meas, meas_set['testing.PA2'])
75 # Delete measurement
76 del meas_set['testing.PA2']
77 self.assertNotIn('testing.PA2', meas_set)
79 # Iterate
80 items = {k: v for k, v in meas_set.items()}
81 self.assertEqual(len(items), len(meas_set))
83 names = [n for n in meas_set]
84 self.assertEqual(len(names), 2)
85 for n in names:
86 self.assertIsInstance(n, Name)
88 # Serialize
89 json_doc = meas_set.json
90 self.assertIsInstance(json_doc, list)
91 self.assertEqual(len(json_doc), 2)
92 for meas in json_doc:
93 self.assertIn('metric', meas)
95 # Deserialize (no blobs/BlobSet to propagate)
96 new_meas_set = MeasurementSet.deserialize(
97 measurements=json_doc,
98 metric_set=self.metric_set)
99 self.assertEqual(meas_set, new_meas_set)
101 def test_measurement_set_update(self):
102 meas_set = MeasurementSet([self.pa1_meas, self.am1_meas])
103 meas_set_2 = MeasurementSet([self.am1_meas, self.pa2_meas])
105 meas_set.update(meas_set_2)
107 self.assertIs(meas_set['testing.PA1'], self.pa1_meas)
108 self.assertIs(meas_set['testing.PA2'], self.pa2_meas)
109 self.assertIs(meas_set['testing.AM1'], self.am1_meas)
111 def test_measurement_iadd(self):
112 meas_set = MeasurementSet([self.pa1_meas, self.am1_meas])
113 meas_set_2 = MeasurementSet([self.am1_meas, self.pa2_meas])
115 meas_set += meas_set_2
117 self.assertIs(meas_set['testing.PA1'], self.pa1_meas)
118 self.assertIs(meas_set['testing.PA2'], self.pa2_meas)
119 self.assertIs(meas_set['testing.AM1'], self.am1_meas)
122class MeasurementSetMetricReloadTestCase(unittest.TestCase):
123 """Use YAML in data/metrics for metric definitions."""
125 def setUp(self):
126 self.metrics_yaml_dirname = os.path.join(
127 os.path.dirname(__file__), 'data')
128 self.metric_set = MetricSet.load_metrics_package(
129 self.metrics_yaml_dirname)
131 def test_reload(self):
132 # Has Metric instance
133 pa1_meas = Measurement(
134 self.metric_set['testing.PA1'],
135 4. * u.mmag
136 )
138 # Don't have metric instances
139 am1_meas = Measurement(
140 'testing.AM1',
141 2. * u.marcsec
142 )
143 pa2_meas = Measurement(
144 'testing.PA2',
145 10. * u.mmag
146 )
148 measurements = MeasurementSet([pa1_meas, am1_meas, pa2_meas])
149 measurements.refresh_metrics(self.metric_set)
151 self.assertIs(
152 measurements['testing.PA1'].metric,
153 self.metric_set['testing.PA1']
154 )
155 self.assertIs(
156 measurements['testing.AM1'].metric,
157 self.metric_set['testing.AM1']
158 )
159 self.assertIs(
160 measurements['testing.PA2'].metric,
161 self.metric_set['testing.PA2']
162 )
165if __name__ == "__main__": 165 ↛ 166line 165 didn't jump to line 166, because the condition on line 165 was never true
166 unittest.main()