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 __future__ import with_statement 

2from __future__ import division 

3from builtins import str 

4import numpy as np 

5import unittest 

6import warnings 

7import lsst.utils.tests 

8 

9from lsst.sims.utils import Site 

10 

11 

12def setup_module(module): 

13 lsst.utils.tests.init() 

14 

15 

16class SiteTest(unittest.TestCase): 

17 

18 def setUp(self): 

19 # LSST default values taken from LSE-30 

20 self.height = 2650.0 

21 self.longitude = -70.7494 

22 self.latitude = -30.2444 

23 self.temperature = 11.5 

24 self.humidity = 0.4 

25 self.pressure = 750.0 

26 self.lapseRate = 0.0065 

27 

28 def testLSST_values(self): 

29 """ 

30 Test that LSST values are set correctly 

31 """ 

32 site = Site(name='LSST') 

33 self.assertEqual(site.name, 'LSST') 

34 self.assertEqual(site.longitude, self.longitude) 

35 self.assertEqual(site.longitude_rad, np.radians(self.longitude)) 

36 self.assertEqual(site.latitude, self.latitude) 

37 self.assertEqual(site.latitude_rad, np.radians(self.latitude)) 

38 self.assertEqual(site.temperature, self.temperature) 

39 self.assertEqual(site.temperature_kelvin, self.temperature + 273.15) 

40 self.assertEqual(site.pressure, self.pressure) 

41 self.assertEqual(site.humidity, self.humidity) 

42 self.assertEqual(site.lapseRate, self.lapseRate) 

43 self.assertEqual(site.height, self.height) 

44 

45 def testNoDefaults(self): 

46 """ 

47 Test that, if name is not 'LSST', values are set to None 

48 """ 

49 with warnings.catch_warnings(record=True) as ww: 

50 site = Site(name='bob') 

51 

52 msg = str(ww[0].message) 

53 

54 self.assertIn('longitude', msg) 

55 self.assertIn('latitude', msg) 

56 self.assertIn('temperature', msg) 

57 self.assertIn('pressure', msg) 

58 self.assertIn('height', msg) 

59 self.assertIn('lapseRate', msg) 

60 self.assertIn('humidity', msg) 

61 

62 self.assertEqual(site.name, 'bob') 

63 self.assertIsNone(site.longitude) 

64 self.assertIsNone(site.longitude_rad) 

65 self.assertIsNone(site.latitude) 

66 self.assertIsNone(site.latitude_rad) 

67 self.assertIsNone(site.temperature) 

68 self.assertIsNone(site.temperature_kelvin) 

69 self.assertIsNone(site.pressure) 

70 self.assertIsNone(site.humidity) 

71 self.assertIsNone(site.lapseRate) 

72 self.assertIsNone(site.height) 

73 

74 def testOverrideLSSTdefaults(self): 

75 """ 

76 Test that, even if LSST is specified, we are capable of overriding 

77 defaults 

78 """ 

79 site = Site(name='LSST', longitude=26.0) 

80 self.assertEqual(site.name, 'LSST') 

81 self.assertEqual(site.longitude, 26.0) 

82 self.assertEqual(site.longitude_rad, np.radians(26.0)) 

83 self.assertEqual(site.latitude, self.latitude) 

84 self.assertEqual(site.latitude_rad, np.radians(self.latitude)) 

85 self.assertEqual(site.temperature, self.temperature) 

86 self.assertEqual(site.pressure, self.pressure) 

87 self.assertEqual(site.humidity, self.humidity) 

88 self.assertEqual(site.lapseRate, self.lapseRate) 

89 self.assertEqual(site.height, self.height) 

90 

91 site = Site(name='LSST', latitude=88.0) 

92 self.assertEqual(site.name, 'LSST') 

93 self.assertEqual(site.longitude, self.longitude) 

94 self.assertEqual(site.longitude_rad, np.radians(self.longitude)) 

95 self.assertEqual(site.latitude, 88.0) 

96 self.assertEqual(site.latitude_rad, np.radians(88.0)) 

97 self.assertEqual(site.temperature, self.temperature) 

98 self.assertEqual(site.temperature_kelvin, self.temperature + 273.15) 

99 self.assertEqual(site.pressure, self.pressure) 

100 self.assertEqual(site.humidity, self.humidity) 

101 self.assertEqual(site.lapseRate, self.lapseRate) 

102 self.assertEqual(site.height, self.height) 

103 

104 site = Site(name='LSST', height=4.0) 

105 self.assertEqual(site.name, 'LSST') 

106 self.assertEqual(site.longitude, self.longitude) 

107 self.assertEqual(site.longitude_rad, np.radians(self.longitude)) 

108 self.assertEqual(site.latitude, self.latitude) 

109 self.assertEqual(site.latitude_rad, np.radians(self.latitude)) 

110 self.assertEqual(site.temperature, self.temperature) 

111 self.assertEqual(site.temperature_kelvin, self.temperature + 273.15) 

112 self.assertEqual(site.pressure, self.pressure) 

113 self.assertEqual(site.humidity, self.humidity) 

114 self.assertEqual(site.lapseRate, self.lapseRate) 

115 self.assertEqual(site.height, 4.0) 

116 

117 site = Site(name='LSST', temperature=7.0) 

118 self.assertEqual(site.name, 'LSST') 

119 self.assertEqual(site.longitude, self.longitude) 

120 self.assertEqual(site.longitude_rad, np.radians(self.longitude)) 

121 self.assertEqual(site.latitude, self.latitude) 

122 self.assertEqual(site.latitude_rad, np.radians(self.latitude)) 

123 self.assertEqual(site.temperature, 7.0) 

124 self.assertEqual(site.temperature_kelvin, 280.15) 

125 self.assertEqual(site.pressure, self.pressure) 

126 self.assertEqual(site.humidity, self.humidity) 

127 self.assertEqual(site.lapseRate, self.lapseRate) 

128 self.assertEqual(site.height, self.height) 

129 

130 site = Site(name='LSST', pressure=14.0) 

131 self.assertEqual(site.name, 'LSST') 

132 self.assertEqual(site.longitude, self.longitude) 

133 self.assertEqual(site.longitude_rad, np.radians(self.longitude)) 

134 self.assertEqual(site.latitude, self.latitude) 

135 self.assertEqual(site.latitude_rad, np.radians(self.latitude)) 

136 self.assertEqual(site.temperature, self.temperature) 

137 self.assertEqual(site.temperature_kelvin, self.temperature + 273.15) 

138 self.assertEqual(site.pressure, 14.0) 

139 self.assertEqual(site.humidity, self.humidity) 

140 self.assertEqual(site.lapseRate, self.lapseRate) 

141 self.assertEqual(site.height, self.height) 

142 

143 site = Site(name='LSST', humidity=2.1) 

144 self.assertEqual(site.name, 'LSST') 

145 self.assertEqual(site.longitude, self.longitude) 

146 self.assertEqual(site.longitude_rad, np.radians(self.longitude)) 

147 self.assertEqual(site.latitude, self.latitude) 

148 self.assertEqual(site.latitude_rad, np.radians(self.latitude)) 

149 self.assertEqual(site.temperature, self.temperature) 

150 self.assertEqual(site.temperature_kelvin, self.temperature + 273.15) 

151 self.assertEqual(site.pressure, self.pressure) 

152 self.assertEqual(site.humidity, 2.1) 

153 self.assertEqual(site.lapseRate, self.lapseRate) 

154 self.assertEqual(site.height, self.height) 

155 

156 site = Site(name='LSST', lapseRate=3.2) 

157 self.assertEqual(site.name, 'LSST') 

158 self.assertEqual(site.longitude, self.longitude) 

159 self.assertEqual(site.longitude_rad, np.radians(self.longitude)) 

160 self.assertEqual(site.latitude, self.latitude) 

161 self.assertEqual(site.latitude_rad, np.radians(self.latitude)) 

162 self.assertEqual(site.temperature, self.temperature) 

163 self.assertEqual(site.temperature_kelvin, self.temperature + 273.15) 

164 self.assertEqual(site.pressure, self.pressure) 

165 self.assertEqual(site.humidity, self.humidity) 

166 self.assertEqual(site.lapseRate, 3.2) 

167 self.assertEqual(site.height, self.height) 

168 

169 def testPartialParams(self): 

170 """ 

171 test that unspecified parameters get set to None 

172 """ 

173 with warnings.catch_warnings(record=True) as ww: 

174 site = Site(longitude=45.0, temperature=20.0) 

175 

176 msg = str(ww[0].message) 

177 self.assertIn('latitude', msg) 

178 self.assertIn('height', msg) 

179 self.assertIn('pressure', msg) 

180 self.assertIn('lapseRate', msg) 

181 self.assertIn('humidity', msg) 

182 self.assertNotIn('longitue', msg) 

183 self.assertNotIn('temperature', msg) 

184 

185 self.assertIsNone(site.name) 

186 self.assertIsNone(site.latitude) 

187 self.assertIsNone(site.latitude_rad) 

188 self.assertIsNone(site.height) 

189 self.assertIsNone(site.pressure) 

190 self.assertIsNone(site.humidity) 

191 self.assertIsNone(site.lapseRate) 

192 self.assertEqual(site.longitude, 45.0) 

193 self.assertEqual(site.longitude_rad, np.pi / 4.0) 

194 self.assertEqual(site.temperature, 20.0) 

195 self.assertEqual(site.temperature_kelvin, 293.15) 

196 

197 def test_eq(self): 

198 """ 

199 Test that we have correctly implemented __eq__ in Site 

200 """ 

201 reference_site = Site(name='ref', longitude=112.12, 

202 latitude=-83.121, temperature=112.1, 

203 height=3124.2, pressure=891.2, 

204 humidity=0.341, lapseRate=0.008) 

205 

206 other_site = Site(name='ref', longitude=112.12, 

207 latitude=-83.121, temperature=112.1, 

208 height=3124.2, pressure=891.2, 

209 humidity=0.341, lapseRate=0.008) 

210 

211 self.assertEqual(reference_site, other_site) 

212 self.assertFalse(reference_site != other_site) 

213 self.assertTrue(reference_site == other_site) 

214 

215 # just in case we ever change the class to convert 

216 # to radians only on demand, call for latitude/longitude 

217 # in radians and then check that the two instances are 

218 # still equal (since __eq__ just loops over the contents 

219 # of self.__dict__, this could fail if other_site has not 

220 # yet assigned a value to longitude/latitude_rad 

221 reference_site.latitude_rad 

222 self.assertEqual(reference_site, other_site) 

223 self.assertFalse(reference_site != other_site) 

224 self.assertTrue(reference_site == other_site) 

225 

226 reference_site.longitude_rad 

227 self.assertEqual(reference_site, other_site) 

228 self.assertFalse(reference_site != other_site) 

229 self.assertTrue(reference_site == other_site) 

230 

231 reference_site.temperature_kelvin 

232 self.assertEqual(reference_site, other_site) 

233 self.assertFalse(reference_site != other_site) 

234 self.assertTrue(reference_site == other_site) 

235 

236 # now test that __ne__ works correctly 

237 other_site = Site(name='other', longitude=112.12, 

238 latitude=-83.121, temperature=112.1, 

239 height=3124.2, pressure=891.2, 

240 humidity=0.341, lapseRate=0.008) 

241 

242 self.assertNotEqual(reference_site, other_site) 

243 self.assertFalse(reference_site == other_site) 

244 self.assertTrue(reference_site != other_site) 

245 

246 other_site = Site(name='ref', longitude=112.13, 

247 latitude=-83.121, temperature=112.1, 

248 height=3124.2, pressure=891.2, 

249 humidity=0.341, lapseRate=0.008) 

250 

251 self.assertNotEqual(reference_site, other_site) 

252 self.assertFalse(reference_site == other_site) 

253 self.assertTrue(reference_site != other_site) 

254 

255 other_site = Site(name='ref', longitude=112.12, 

256 latitude=-83.122, temperature=112.1, 

257 height=3124.2, pressure=891.2, 

258 humidity=0.341, lapseRate=0.008) 

259 

260 self.assertNotEqual(reference_site, other_site) 

261 self.assertFalse(reference_site == other_site) 

262 self.assertTrue(reference_site != other_site) 

263 

264 other_site = Site(name='ref', longitude=112.12, 

265 latitude=-83.121, temperature=112.2, 

266 height=3124.2, pressure=891.2, 

267 humidity=0.341, lapseRate=0.008) 

268 

269 self.assertNotEqual(reference_site, other_site) 

270 self.assertFalse(reference_site == other_site) 

271 self.assertTrue(reference_site != other_site) 

272 

273 other_site = Site(name='ref', longitude=112.12, 

274 latitude=-83.121, temperature=112.1, 

275 height=3124.3, pressure=891.2, 

276 humidity=0.341, lapseRate=0.008) 

277 

278 self.assertNotEqual(reference_site, other_site) 

279 self.assertFalse(reference_site == other_site) 

280 self.assertTrue(reference_site != other_site) 

281 

282 other_site = Site(name='ref', longitude=112.12, 

283 latitude=-83.121, temperature=112.1, 

284 height=3124.2, pressure=891.3, 

285 humidity=0.341, lapseRate=0.008) 

286 

287 self.assertNotEqual(reference_site, other_site) 

288 self.assertFalse(reference_site == other_site) 

289 self.assertTrue(reference_site != other_site) 

290 

291 other_site = Site(name='ref', longitude=112.12, 

292 latitude=-83.121, temperature=112.1, 

293 height=3124.2, pressure=891.2, 

294 humidity=0.342, lapseRate=0.008) 

295 

296 self.assertNotEqual(reference_site, other_site) 

297 self.assertFalse(reference_site == other_site) 

298 self.assertTrue(reference_site != other_site) 

299 

300 other_site = Site(name='ref', longitude=112.12, 

301 latitude=-83.121, temperature=112.1, 

302 height=3124.2, pressure=891.2, 

303 humidity=0.341, lapseRate=0.009) 

304 

305 self.assertNotEqual(reference_site, other_site) 

306 self.assertFalse(reference_site == other_site) 

307 self.assertTrue(reference_site != other_site) 

308 

309 # test blank Sites 

310 ref_site = Site() 

311 other_site = Site() 

312 self.assertEqual(ref_site, other_site) 

313 self.assertTrue(ref_site == other_site) 

314 self.assertFalse(ref_site != other_site) 

315 

316 

317class MemoryTestClass(lsst.utils.tests.MemoryTestCase): 

318 pass 

319 

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

321 lsst.utils.tests.init() 

322 unittest.main()