Coverage for tests/test_measurementset.py: 17%

71 statements  

« prev     ^ index     » next       coverage.py v7.3.1, created at 2023-09-14 09:44 +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/>. 

21 

22import os 

23import unittest 

24 

25import astropy.units as u 

26 

27from lsst.verify import MeasurementSet, Measurement, MetricSet, Name 

28 

29 

30class MeasurementSetTestCase(unittest.TestCase): 

31 

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) 

38 

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 ) 

51 

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) 

58 

59 # add an inconsistently labelled measurement 

60 with self.assertRaises(KeyError): 

61 meas_set['testing.AMx'] = self.am1_meas 

62 

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']) 

68 

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']) 

74 

75 # Delete measurement 

76 del meas_set['testing.PA2'] 

77 self.assertNotIn('testing.PA2', meas_set) 

78 

79 # Iterate 

80 items = {k: v for k, v in meas_set.items()} 

81 self.assertEqual(len(items), len(meas_set)) 

82 

83 names = [n for n in meas_set] 

84 self.assertEqual(len(names), 2) 

85 for n in names: 

86 self.assertIsInstance(n, Name) 

87 

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) 

94 

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) 

100 

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]) 

104 

105 meas_set.update(meas_set_2) 

106 

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) 

110 

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]) 

114 

115 meas_set += meas_set_2 

116 

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) 

120 

121 

122class MeasurementSetMetricReloadTestCase(unittest.TestCase): 

123 """Use YAML in data/metrics for metric definitions.""" 

124 

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) 

130 

131 def test_reload(self): 

132 # Has Metric instance 

133 pa1_meas = Measurement( 

134 self.metric_set['testing.PA1'], 

135 4. * u.mmag 

136 ) 

137 

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 ) 

147 

148 measurements = MeasurementSet([pa1_meas, am1_meas, pa2_meas]) 

149 measurements.refresh_metrics(self.metric_set) 

150 

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 ) 

163 

164 

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

166 unittest.main()