11import logging
22pvl_logger = logging .getLogger ('pvlib' )
33
4+ from collections import OrderedDict
5+
46import numpy as np
57import pandas as pd
68
79from nose .tools import raises
8- from numpy .testing import assert_almost_equal
10+ from numpy .testing import assert_almost_equal , assert_allclose
911from pandas .util .testing import assert_frame_equal , assert_series_equal
1012
1113from pvlib .location import Location
@@ -170,29 +172,42 @@ def test_simplified_solis_series_elevation():
170172
171173
172174def 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
176179
177180 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+
179184
185+ def test_simplified_solis_scalar_neg_elevation ():
186+ expected = OrderedDict ()
187+ expected ['ghi' ] = 0
188+ expected ['dni' ] = 0
189+ expected ['dhi' ] = 0
180190
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 ():
182197 expected = pd .DataFrame (np .array ([[959.335463 , 1064.653145 , 129.125602 ]]),
183198 columns = ['dni' , 'ghi' , 'dhi' ])
184- expected = expected [['dhi ' , 'dni' , 'ghi ' ]]
199+ expected = expected [['ghi ' , 'dni' , 'dhi ' ]]
185200
186- out = clearsky .simplified_solis (np . array ([ 80 ] ))
201+ out = clearsky .simplified_solis (pd . Series ( 80 ))
187202 assert_frame_equal (expected , out )
188203
189204
190205def test_simplified_solis_dni_extra ():
191206 expected = pd .DataFrame (np .array ([[963.555414 , 1069.33637 , 129.693603 ]]),
192207 columns = ['dni' , 'ghi' , 'dhi' ])
193- expected = expected [['dhi ' , 'dni' , 'ghi ' ]]
208+ expected = expected [['ghi ' , 'dni' , 'dhi ' ]]
194209
195- out = clearsky .simplified_solis (80 , dni_extra = 1370 )
210+ out = clearsky .simplified_solis (80 , dni_extra = pd . Series ( 1370 ) )
196211 assert_frame_equal (expected , out )
197212
198213
@@ -202,10 +217,10 @@ def test_simplified_solis_pressure():
202217 [ 961.88811874 , 1066.36847963 , 128.1402539 ],
203218 [ 959.58112234 , 1064.81837558 , 129.0304193 ]]),
204219 columns = ['dni' , 'ghi' , 'dhi' ])
205- expected = expected [['dhi ' , 'dni' , 'ghi ' ]]
220+ expected = expected [['ghi ' , 'dni' , 'dhi ' ]]
206221
207222 out = clearsky .simplified_solis (
208- 80 , pressure = np . array ([95000 , 98000 , 101000 ]))
223+ 80 , pressure = pd . Series ([95000 , 98000 , 101000 ]))
209224 assert_frame_equal (expected , out )
210225
211226
@@ -217,9 +232,9 @@ def test_simplified_solis_aod700():
217232 [ 342.45810926 , 638.63409683 , 77.71786575 ],
218233 [ 55.24140911 , 7.5413313 , 0. ]]),
219234 columns = ['dni' , 'ghi' , 'dhi' ])
220- expected = expected [['dhi ' , 'dni' , 'ghi ' ]]
235+ expected = expected [['ghi ' , 'dni' , 'dhi ' ]]
221236
222- aod700 = np . array ([0.0 , 0.05 , 0.1 , 1 , 10 ])
237+ aod700 = pd . Series ([0.0 , 0.05 , 0.1 , 1 , 10 ])
223238 out = clearsky .simplified_solis (80 , aod700 = aod700 )
224239 assert_frame_equal (expected , out )
225240
@@ -232,39 +247,120 @@ def test_simplified_solis_precipitable_water():
232247 [ 959.3354628 , 1064.65314509 , 129.12560167 ],
233248 [ 872.02335029 , 974.18046717 , 125.63581346 ]]),
234249 columns = ['dni' , 'ghi' , 'dhi' ])
235- expected = expected [['dhi ' , 'dni' , 'ghi ' ]]
250+ expected = expected [['ghi ' , 'dni' , 'dhi ' ]]
236251
237252 out = clearsky .simplified_solis (
238253 80 , precipitable_water = pd .Series ([0.0 , 0.2 , 0.5 , 1.0 , 5.0 ]))
239254 assert_frame_equal (expected , out )
240255
241256
242257def 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
247263
248264 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+
250268
269+ def test_simplified_solis_return_arrays ():
270+ expected = OrderedDict ()
251271
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 ]])
255274
256- [[ 1148.40081325 , 913.42330823 ],
257- [ 965.48550828 , 760.04527609 ]],
275+ expected [ 'dni' ] = np . array ( [[ 1099.25706525 , 656.24601381 ],
276+ [ 915.31689149 , 530.31697378 ]])
258277
259- [[ 64.1063074 , 254.6186615 ],
260- [ 62.75642216 , 232.21931597 ] ]])
278+ expected [ 'dhi' ] = np . array ( [[ 64.1063074 , 254.6186615 ],
279+ [ 62.75642216 , 232.21931597 ]])
261280
262281 aod700 = np .linspace (0 , 0.5 , 2 )
263282 precipitable_water = np .linspace (0 , 10 , 2 )
264283
265284 aod700 , precipitable_water = np .meshgrid (aod700 , precipitable_water )
266285
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
269296
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