@@ -620,21 +620,59 @@ def test_gti_dirint():
620620
621621
622622def test_erbs ():
623- ghi = pd .Series ([ 0 , 50 , 1000 , 1000 ])
624- zenith = pd .Series ([120 , 85 , 10 , 10 ] )
625- doy = pd .Series ([1 , 1 , 1 , 180 ] )
626- expected = pd .DataFrame (np .
627- array ([[ - 0.00000000e+00 , 0.00000000e+00 , - 0.00000000e+00 ],
628- [ 9.67127061e +01 , 4.15709323e +01 , 4.05715990e -01 ],
629- [ 7.94187742e +02 , 2.17877755e +02 , 7.18119416e -01 ],
630- [ 8.42358014e +02 , 1.70439297e +02 , 7.68919470e -01 ]]),
631- columns = ['dni' , 'dhi' , 'kt' ])
623+ index = pd .DatetimeIndex ([ '20190101' ] * 3 + [ '20190620' ])
624+ ghi = pd .Series ([0 , 50 , 1000 , 1000 ], index = index )
625+ zenith = pd .Series ([120 , 85 , 10 , 10 ], index = index )
626+ expected = pd .DataFrame (np .array (
627+ [[ 0.00000000e+00 , 0.00000000e+00 , 0.00000000e+00 ],
628+ [ 9.67192672e +01 , 4.15703604e +01 , 4.05723511e -01 ],
629+ [ 7.94205651e +02 , 2.17860117e +02 , 7.18132729e -01 ],
630+ [ 8.42001578e +02 , 1.70790318e +02 , 7.68214312e -01 ]]),
631+ columns = ['dni' , 'dhi' , 'kt' ], index = index )
632632
633- out = irradiance .erbs (ghi , zenith , doy )
633+ out = irradiance .erbs (ghi , zenith , index )
634634
635635 assert_frame_equal (np .round (out , 0 ), np .round (expected , 0 ))
636636
637637
638+ def test_erbs_min_cos_zenith_max_zenith ():
639+ # map out behavior under difficult conditions with various
640+ # limiting kwargs settings
641+ columns = ['dni' , 'dhi' , 'kt' ]
642+ times = pd .DatetimeIndex (['2016-07-19 06:11:00' ], tz = 'America/Phoenix' )
643+
644+ # max_zenith keeps these results reasonable
645+ out = irradiance .erbs (ghi = 1.0 , zenith = 89.99999 ,
646+ datetime_or_doy = times , min_cos_zenith = 0 )
647+ expected = pd .DataFrame (np .array (
648+ [[0. , 1. , 1. ]]),
649+ columns = columns , index = times )
650+ assert_frame_equal (out , expected )
651+
652+ # 4-5 9s will produce bad behavior without max_zenith limit
653+ out = irradiance .erbs (ghi = 1.0 , zenith = 89.99999 ,
654+ datetime_or_doy = times , max_zenith = 100 )
655+ expected = pd .DataFrame (np .array (
656+ [[6.00115286e+03 , 9.98952601e-01 , 1.16377640e-02 ]]),
657+ columns = columns , index = times )
658+ assert_frame_equal (out , expected )
659+
660+ # 1-2 9s will produce bad behavior without either limit
661+ out = irradiance .erbs (ghi = 1.0 , zenith = 89.99 , datetime_or_doy = times ,
662+ min_cos_zenith = 0 , max_zenith = 100 )
663+ expected = pd .DataFrame (np .array (
664+ [[4.78419761e+03 , 1.65000000e-01 , 1.00000000e+00 ]]),
665+ columns = columns , index = times )
666+ assert_frame_equal (out , expected )
667+
668+ # check default behavior under hardest condition
669+ out = irradiance .erbs (ghi = 1.0 , zenith = 90 , datetime_or_doy = times )
670+ expected = pd .DataFrame (np .array (
671+ [[0. , 1. , 0.01163776 ]]),
672+ columns = columns , index = times )
673+ assert_frame_equal (out , expected )
674+
675+
638676def test_erbs_all_scalar ():
639677 ghi = 1000
640678 zenith = 10
0 commit comments