11import pytest
22from pandas .util .testing import assert_series_equal
33import pandas as pd
4- from pvlib import tracking , modelchain , irradiance
4+ from pvlib import tracking , pvsystem , modelchain , irradiance
55from pvanalytics .features import orientation
66
7+ from ..conftest import requires_pvlib
8+
79
810def test_clearsky_ghi_fixed (clearsky , solarposition ):
911 """Identify every day as fixed, since clearsky GHI is sunny."""
@@ -40,9 +42,13 @@ def test_ghi_not_tracking(clearsky, solarposition):
4042
4143
4244@pytest .fixture
43- def power_tracking (clearsky , albuquerque , system_parameters ):
45+ def power_tracking_old_pvlib (clearsky , albuquerque , array_parameters ,
46+ system_parameters ):
4447 """Simulated power for a pvlib SingleAxisTracker PVSystem in Albuquerque"""
45- system = tracking .SingleAxisTracker (** system_parameters )
48+ # copy of `power_tracking` but with older pvlib API
49+ # TODO: remove when minimum pvlib version is >= 0.9.0
50+ system = tracking .SingleAxisTracker (** array_parameters ,
51+ ** system_parameters )
4652 mc = modelchain .ModelChain (
4753 system ,
4854 albuquerque ,
@@ -51,6 +57,34 @@ def power_tracking(clearsky, albuquerque, system_parameters):
5157 return mc .ac
5258
5359
60+ @pytest .fixture
61+ def power_tracking (clearsky , albuquerque , array_parameters , system_parameters ):
62+ """Simulated power for a pvlib SingleAxisTracker PVSystem in Albuquerque"""
63+ array = pvsystem .Array (pvsystem .SingleAxisTrackerMount (),
64+ ** array_parameters )
65+ system = pvsystem .PVSystem (arrays = [array ],
66+ ** system_parameters )
67+ mc = modelchain .ModelChain (
68+ system ,
69+ albuquerque ,
70+ )
71+ mc .run_model (clearsky )
72+ return mc .results .ac
73+
74+
75+ @requires_pvlib ('<0.9.0' , reason = "SingleAxisTracker deprecation" )
76+ def test_power_tracking_old_pvlib (power_tracking_old_pvlib , solarposition ):
77+ """simulated power from a single axis tracker is identified as sunny
78+ with tracking=True"""
79+ # copy of `test_power_tracking` but with older pvlib API
80+ # TODO: remove when minimum pvlib version is >= 0.9.0
81+ assert orientation .tracking_nrel (
82+ power_tracking_old_pvlib ,
83+ solarposition ['zenith' ] < 87
84+ ).all ()
85+
86+
87+ @requires_pvlib ('>=0.9.0' , reason = "Array class" )
5488def test_power_tracking (power_tracking , solarposition ):
5589 """simulated power from a single axis tracker is identified as sunny
5690 with tracking=True"""
@@ -60,6 +94,33 @@ def test_power_tracking(power_tracking, solarposition):
6094 ).all ()
6195
6296
97+ @requires_pvlib ('<0.9.0' , reason = "SingleAxisTracker deprecation" )
98+ def test_power_tracking_perturbed_old_pvlib (power_tracking_old_pvlib ,
99+ solarposition ):
100+ """A day with perturbed values is not marked as tracking."""
101+ # copy of `test_power_tracking_perturbed` but with older pvlib API
102+ # TODO: remove when minimum pvlib version is >= 0.9.0
103+ power_tracking_old_pvlib .iloc [6 :18 ] = 10
104+ expected = pd .Series (True , index = power_tracking_old_pvlib .index )
105+ expected .iloc [0 :24 ] = False
106+ assert_series_equal (
107+ expected ,
108+ orientation .tracking_nrel (
109+ power_tracking_old_pvlib ,
110+ solarposition ['zenith' ] < 87
111+ )
112+ )
113+ assert_series_equal (
114+ expected ,
115+ orientation .tracking_nrel (
116+ power_tracking_old_pvlib ,
117+ solarposition ['zenith' ] < 87 ,
118+ peak_min = 100
119+ )
120+ )
121+
122+
123+ @requires_pvlib ('>=0.9.0' , reason = "Array class" )
63124def test_power_tracking_perturbed (power_tracking , solarposition ):
64125 """A day with perturbed values is not marked as tracking."""
65126 power_tracking .iloc [6 :18 ] = 10
0 commit comments