1
1
import logging
2
2
pvl_logger = logging .getLogger ('pvlib' )
3
3
4
+ from collections import OrderedDict
5
+
4
6
import numpy as np
5
7
import pandas as pd
6
8
7
9
from nose .tools import raises
8
- from numpy .testing import assert_almost_equal
10
+ from numpy .testing import assert_almost_equal , assert_allclose
9
11
from pandas .util .testing import assert_frame_equal , assert_series_equal
10
12
11
13
from pvlib .location import Location
@@ -170,29 +172,42 @@ def test_simplified_solis_series_elevation():
170
172
171
173
172
174
def test_simplified_solis_scalar_elevation ():
173
- expected = pd .DataFrame (np .array ([[959.335463 , 1064.653145 , 129.125602 ]]),
174
- columns = ['dni' , 'ghi' , 'dhi' ])
175
- expected = expected [['dhi' , 'dni' , 'ghi' ]]
175
+ expected = OrderedDict ()
176
+ expected ['ghi' ] = 1064.653145
177
+ expected ['dni' ] = 959.335463
178
+ expected ['dhi' ] = 129.125602
176
179
177
180
out = clearsky .simplified_solis (80 )
178
- assert_frame_equal (expected , out )
181
+ for k , v in expected .items ():
182
+ yield assert_allclose , expected [k ], out [k ]
183
+
179
184
185
+ def test_simplified_solis_scalar_neg_elevation ():
186
+ expected = OrderedDict ()
187
+ expected ['ghi' ] = 0
188
+ expected ['dni' ] = 0
189
+ expected ['dhi' ] = 0
180
190
181
- def test_simplified_solis_array_elevation ():
191
+ out = clearsky .simplified_solis (- 10 )
192
+ for k , v in expected .items ():
193
+ yield assert_allclose , expected [k ], out [k ]
194
+
195
+
196
+ def test_simplified_solis_series_elevation ():
182
197
expected = pd .DataFrame (np .array ([[959.335463 , 1064.653145 , 129.125602 ]]),
183
198
columns = ['dni' , 'ghi' , 'dhi' ])
184
- expected = expected [['dhi ' , 'dni' , 'ghi ' ]]
199
+ expected = expected [['ghi ' , 'dni' , 'dhi ' ]]
185
200
186
- out = clearsky .simplified_solis (np . array ([ 80 ] ))
201
+ out = clearsky .simplified_solis (pd . Series ( 80 ))
187
202
assert_frame_equal (expected , out )
188
203
189
204
190
205
def test_simplified_solis_dni_extra ():
191
206
expected = pd .DataFrame (np .array ([[963.555414 , 1069.33637 , 129.693603 ]]),
192
207
columns = ['dni' , 'ghi' , 'dhi' ])
193
- expected = expected [['dhi ' , 'dni' , 'ghi ' ]]
208
+ expected = expected [['ghi ' , 'dni' , 'dhi ' ]]
194
209
195
- out = clearsky .simplified_solis (80 , dni_extra = 1370 )
210
+ out = clearsky .simplified_solis (80 , dni_extra = pd . Series ( 1370 ) )
196
211
assert_frame_equal (expected , out )
197
212
198
213
@@ -202,10 +217,10 @@ def test_simplified_solis_pressure():
202
217
[ 961.88811874 , 1066.36847963 , 128.1402539 ],
203
218
[ 959.58112234 , 1064.81837558 , 129.0304193 ]]),
204
219
columns = ['dni' , 'ghi' , 'dhi' ])
205
- expected = expected [['dhi ' , 'dni' , 'ghi ' ]]
220
+ expected = expected [['ghi ' , 'dni' , 'dhi ' ]]
206
221
207
222
out = clearsky .simplified_solis (
208
- 80 , pressure = np . array ([95000 , 98000 , 101000 ]))
223
+ 80 , pressure = pd . Series ([95000 , 98000 , 101000 ]))
209
224
assert_frame_equal (expected , out )
210
225
211
226
@@ -217,9 +232,9 @@ def test_simplified_solis_aod700():
217
232
[ 342.45810926 , 638.63409683 , 77.71786575 ],
218
233
[ 55.24140911 , 7.5413313 , 0. ]]),
219
234
columns = ['dni' , 'ghi' , 'dhi' ])
220
- expected = expected [['dhi ' , 'dni' , 'ghi ' ]]
235
+ expected = expected [['ghi ' , 'dni' , 'dhi ' ]]
221
236
222
- aod700 = np . array ([0.0 , 0.05 , 0.1 , 1 , 10 ])
237
+ aod700 = pd . Series ([0.0 , 0.05 , 0.1 , 1 , 10 ])
223
238
out = clearsky .simplified_solis (80 , aod700 = aod700 )
224
239
assert_frame_equal (expected , out )
225
240
@@ -232,39 +247,120 @@ def test_simplified_solis_precipitable_water():
232
247
[ 959.3354628 , 1064.65314509 , 129.12560167 ],
233
248
[ 872.02335029 , 974.18046717 , 125.63581346 ]]),
234
249
columns = ['dni' , 'ghi' , 'dhi' ])
235
- expected = expected [['dhi ' , 'dni' , 'ghi ' ]]
250
+ expected = expected [['ghi ' , 'dni' , 'dhi ' ]]
236
251
237
252
out = clearsky .simplified_solis (
238
253
80 , precipitable_water = pd .Series ([0.0 , 0.2 , 0.5 , 1.0 , 5.0 ]))
239
254
assert_frame_equal (expected , out )
240
255
241
256
242
257
def test_simplified_solis_small_scalar_pw ():
243
- expected = pd .DataFrame (np .
244
- array ([[ 1001.15353307 , 1107.84678941 , 128.58887606 ]]),
245
- columns = ['dni' , 'ghi' , 'dhi' ])
246
- expected = expected [['dhi' , 'dni' , 'ghi' ]]
258
+
259
+ expected = OrderedDict ()
260
+ expected ['ghi' ] = 1107.84678941
261
+ expected ['dni' ] = 1001.15353307
262
+ expected ['dhi' ] = 128.58887606
247
263
248
264
out = clearsky .simplified_solis (80 , precipitable_water = 0.1 )
249
- assert_frame_equal (expected , out )
265
+ for k , v in expected .items ():
266
+ yield assert_allclose , expected [k ], out [k ]
267
+
250
268
269
+ def test_simplified_solis_return_arrays ():
270
+ expected = OrderedDict ()
251
271
252
- def test_simplified_solis_return_raw ():
253
- expected = np .array ([[[ 1099.25706525 , 656.24601381 ],
254
- [ 915.31689149 , 530.31697378 ]],
272
+ expected ['ghi' ] = np .array ([[ 1148.40081325 , 913.42330823 ],
273
+ [ 965.48550828 , 760.04527609 ]])
255
274
256
- [[ 1148.40081325 , 913.42330823 ],
257
- [ 965.48550828 , 760.04527609 ]],
275
+ expected [ 'dni' ] = np . array ( [[ 1099.25706525 , 656.24601381 ],
276
+ [ 915.31689149 , 530.31697378 ]])
258
277
259
- [[ 64.1063074 , 254.6186615 ],
260
- [ 62.75642216 , 232.21931597 ] ]])
278
+ expected [ 'dhi' ] = np . array ( [[ 64.1063074 , 254.6186615 ],
279
+ [ 62.75642216 , 232.21931597 ]])
261
280
262
281
aod700 = np .linspace (0 , 0.5 , 2 )
263
282
precipitable_water = np .linspace (0 , 10 , 2 )
264
283
265
284
aod700 , precipitable_water = np .meshgrid (aod700 , precipitable_water )
266
285
267
- out = clearsky .simplified_solis (80 , aod700 , precipitable_water ,
268
- return_raw = True )
286
+ out = clearsky .simplified_solis (80 , aod700 , precipitable_water )
287
+
288
+ for k , v in expected .items ():
289
+ yield assert_allclose , expected [k ], out [k ]
290
+
291
+
292
+ def test_simplified_solis_nans_arrays ():
293
+
294
+ # construct input arrays that each have 1 nan offset from each other,
295
+ # the last point is valid for all arrays
269
296
270
- np .allclose (expected , out )
297
+ length = 6
298
+
299
+ apparent_elevation = np .full (length , 80. )
300
+ apparent_elevation [0 ] = np .nan
301
+
302
+ aod700 = np .full (length , 0.1 )
303
+ aod700 [1 ] = np .nan
304
+
305
+ precipitable_water = np .full (length , 0.5 )
306
+ precipitable_water [2 ] = np .nan
307
+
308
+ pressure = np .full (length , 98000. )
309
+ pressure [3 ] = np .nan
310
+
311
+ dni_extra = np .full (length , 1370. )
312
+ dni_extra [4 ] = np .nan
313
+
314
+ expected = OrderedDict ()
315
+ expected ['ghi' ] = np .full (length , np .nan )
316
+ expected ['dni' ] = np .full (length , np .nan )
317
+ expected ['dhi' ] = np .full (length , np .nan )
318
+
319
+ expected ['ghi' ][length - 1 ] = 1096.022736
320
+ expected ['dni' ][length - 1 ] = 990.306854
321
+ expected ['dhi' ][length - 1 ] = 128.664594
322
+
323
+ out = clearsky .simplified_solis (apparent_elevation , aod700 ,
324
+ precipitable_water , pressure , dni_extra )
325
+
326
+ for k , v in expected .items ():
327
+ yield assert_allclose , expected [k ], out [k ]
328
+
329
+
330
+ def test_simplified_solis_nans_series ():
331
+
332
+ # construct input arrays that each have 1 nan offset from each other,
333
+ # the last point is valid for all arrays
334
+
335
+ length = 6
336
+
337
+ apparent_elevation = pd .Series (np .full (length , 80. ))
338
+ apparent_elevation [0 ] = np .nan
339
+
340
+ aod700 = np .full (length , 0.1 )
341
+ aod700 [1 ] = np .nan
342
+
343
+ precipitable_water = np .full (length , 0.5 )
344
+ precipitable_water [2 ] = np .nan
345
+
346
+ pressure = np .full (length , 98000. )
347
+ pressure [3 ] = np .nan
348
+
349
+ dni_extra = np .full (length , 1370. )
350
+ dni_extra [4 ] = np .nan
351
+
352
+ expected = OrderedDict ()
353
+ expected ['ghi' ] = np .full (length , np .nan )
354
+ expected ['dni' ] = np .full (length , np .nan )
355
+ expected ['dhi' ] = np .full (length , np .nan )
356
+
357
+ expected ['ghi' ][length - 1 ] = 1096.022736
358
+ expected ['dni' ][length - 1 ] = 990.306854
359
+ expected ['dhi' ][length - 1 ] = 128.664594
360
+
361
+ expected = pd .DataFrame .from_dict (expected )
362
+
363
+ out = clearsky .simplified_solis (apparent_elevation , aod700 ,
364
+ precipitable_water , pressure , dni_extra )
365
+
366
+ assert_frame_equal (expected , out )
0 commit comments