Ejemplo n.º 1
0
def test_custom_tracking_envelope_thresholds(summer_power_fixed):
    """Can pass a custom set of minimal r^2 values."""
    assert system.is_tracking_envelope(
        summer_power_fixed,
        summer_power_fixed > 0,
        pd.Series(False, index=summer_power_fixed.index),
        fit_params={
            (0.5, 1.0): {
                'fixed': 0.9,
                'tracking': 0.9,
                'fixed_max': 0.9
            }
        }) is system.Tracker.FIXED

    assert system.is_tracking_envelope(
        summer_power_fixed,
        summer_power_fixed > 0,
        pd.Series(False, index=summer_power_fixed.index),
        fit_params={
            (0.0, 1.0): {
                'fixed': 1.0,
                'tracking': 0.8,
                'fixed_max': 1.0
            }
        },
        fit_median=False) is system.Tracker.TRACKING
Ejemplo n.º 2
0
def test_median_mismatch_fixed(summer_power_fixed):
    """If the median does not have the same profile as the 99.5% quantile
    then tracking is UNKNOWN."""
    power_half_fixed = summer_power_fixed.copy()
    power_half_fixed.iloc[0:100 * 24] = 1
    assert system.is_tracking_envelope(
        power_half_fixed,
        pd.Series(True, index=power_half_fixed.index),
        pd.Series(False, index=power_half_fixed.index),
        fit_median=False) is system.Tracker.FIXED
    assert system.is_tracking_envelope(
        power_half_fixed, pd.Series(True, index=power_half_fixed.index),
        pd.Series(False,
                  index=power_half_fixed.index)) is system.Tracker.UNKNOWN
Ejemplo n.º 3
0
def test_median_mismatch_tracking(summer_power_tracking):
    """If the median does not have the same fit as the 99.5% quantile then
    tracking is UNKNOWN."""
    power_half_tracking = summer_power_tracking.copy()
    power_half_tracking.iloc[0:100 * 24] = 1
    assert system.is_tracking_envelope(
        power_half_tracking,
        pd.Series(True, index=power_half_tracking.index),
        pd.Series(False, index=power_half_tracking.index),
        fit_median=False) is system.Tracker.TRACKING
    assert system.is_tracking_envelope(
        power_half_tracking, pd.Series(True, index=power_half_tracking.index),
        pd.Series(False,
                  index=power_half_tracking.index)) is system.Tracker.UNKNOWN
Ejemplo n.º 4
0
def test_median_mismatch_tracking_old_pvlib(summer_power_tracking_old_pvlib):
    """If the median does not have the same fit as the 99.5% quantile then
    tracking is UNKNOWN."""
    # copy of `test_median_mismatch_tracking` but with older pvlib API
    # TODO: remove when minimum pvlib version is >= 0.9.0
    power_half_tracking = summer_power_tracking_old_pvlib.copy()
    power_half_tracking.iloc[0:100 * 24] = 1
    assert system.is_tracking_envelope(
        power_half_tracking,
        pd.Series(True, index=power_half_tracking.index),
        pd.Series(False, index=power_half_tracking.index),
        fit_median=False) is system.Tracker.TRACKING
    assert system.is_tracking_envelope(
        power_half_tracking, pd.Series(True, index=power_half_tracking.index),
        pd.Series(False,
                  index=power_half_tracking.index)) is system.Tracker.UNKNOWN
Ejemplo n.º 5
0
def test_power_tracking_envelope_tracking(summer_power_tracking):
    """Simulated single axis tracker is identified as TRACKING."""
    assert system.is_tracking_envelope(
        summer_power_tracking, summer_power_tracking > 0,
        pd.Series(
            False,
            index=summer_power_tracking.index)) is system.Tracker.TRACKING
Ejemplo n.º 6
0
def test_year_bad_winter_tracking_envelope(winter_perturbed,
                                           albuquerque_clearsky):
    """If the data is perturbed during the winter months
    is_tracking_envelope() returns Tracker.UNKNOWN."""
    assert system.is_tracking_envelope(
        winter_perturbed['ghi'], albuquerque_clearsky['ghi'] > 0,
        pd.Series(False,
                  index=albuquerque_clearsky.index)) is system.Tracker.UNKNOWN
Ejemplo n.º 7
0
def test_constant_unknown_tracking_envelope(summer_ghi):
    """A constant signal has unknown tracking."""
    constant = pd.Series(1, index=summer_ghi.index)
    assert system.is_tracking_envelope(
        constant,
        pd.Series(True, index=summer_ghi.index),
        pd.Series(False, index=summer_ghi.index),
    ) is system.Tracker.UNKNOWN
Ejemplo n.º 8
0
def test_high_clipping_unknown_tracking_envelope(summer_power_fixed):
    """If the amount of clipping is high then tracking is UNKNOWN"""
    clipping = pd.Series(False, index=summer_power_fixed.index)
    # 50% clipping
    clipping.iloc[0:len(clipping) // 2] = True
    assert system.is_tracking_envelope(
        summer_power_fixed, summer_power_fixed > 0, clipping,
        clip_max=0.4) is system.Tracker.UNKNOWN
Ejemplo n.º 9
0
def test_power_tracking_envelope_tracking_old_pvlib(
        summer_power_tracking_old_pvlib):
    """Simulated single axis tracker is identified as TRACKING."""
    # copy of `test_power_tracking_envelope_tracking` but with older pvlib API
    # TODO: remove when minimum pvlib version is >= 0.9.0
    assert system.is_tracking_envelope(
        summer_power_tracking_old_pvlib, summer_power_tracking_old_pvlib > 0,
        pd.Series(False, index=summer_power_tracking_old_pvlib.index)
    ) is system.Tracker.TRACKING
Ejemplo n.º 10
0
def test_power_tracking_envelope_fixed(summer_power_fixed):
    """Simulated system under clearsky condidtions is FIXED."""
    assert system.is_tracking_envelope(
        summer_power_fixed, summer_power_fixed > 0,
        pd.Series(False,
                  index=summer_power_fixed.index)) is system.Tracker.FIXED
Ejemplo n.º 11
0
def test_ghi_tracking_envelope_fixed(summer_ghi):
    """Clearsky GHI for a system that is FIXED."""
    assert system.is_tracking_envelope(
        summer_ghi, summer_ghi > 0, pd.Series(
            False, index=summer_ghi.index)) is system.Tracker.FIXED
Ejemplo n.º 12
0
def test_tracking_envelope_seasonal_split(winter_perturbed,
                                          albuquerque_clearsky):
    """If winter or summer months are empty then only the season
    that is specified is used to determine fixed/tracking.

    Uses the fixture with perturbed winter months so that tests
    will fail if the winter months are analyzed.
    """
    # no 'summer' months
    assert system.is_tracking_envelope(
        winter_perturbed['ghi'],
        albuquerque_clearsky['ghi'] > 0,
        pd.Series(False, index=albuquerque_clearsky.index),
        seasonal_split={
            'summer': [],
            'winter': [5, 6, 7, 8]
        }) is system.Tracker.FIXED
    assert system.is_tracking_envelope(
        winter_perturbed['ghi'],
        albuquerque_clearsky['ghi'] > 0,
        pd.Series(False, index=albuquerque_clearsky.index),
        seasonal_split={
            'summer': None,
            'winter': [5, 6, 7, 8]
        }) is system.Tracker.FIXED
    # no 'winter' months
    assert system.is_tracking_envelope(
        winter_perturbed['ghi'],
        albuquerque_clearsky['ghi'] > 0,
        pd.Series(False, index=albuquerque_clearsky.index),
        seasonal_split={
            'summer': [5, 6, 7, 8],
            'winter': []
        }) is system.Tracker.FIXED
    assert system.is_tracking_envelope(
        winter_perturbed['ghi'],
        albuquerque_clearsky['ghi'] > 0,
        pd.Series(False, index=albuquerque_clearsky.index),
        seasonal_split={
            'summer': [5, 6, 7, 8],
            'winter': None
        }) is system.Tracker.FIXED
    # Leaving out a key is equivalent to passing None as its value
    assert system.is_tracking_envelope(
        winter_perturbed['ghi'],
        albuquerque_clearsky['ghi'] > 0,
        pd.Series(False, index=albuquerque_clearsky.index),
        seasonal_split={'summer': [5, 6, 7, 8]}) is system.Tracker.FIXED
    assert system.is_tracking_envelope(
        winter_perturbed['ghi'],
        albuquerque_clearsky['ghi'] > 0,
        pd.Series(False, index=albuquerque_clearsky.index),
        seasonal_split={'winter': [5, 6, 7, 8]}) is system.Tracker.FIXED
    # median fit should fail
    assert system.is_tracking_envelope(
        winter_perturbed['ghi'],
        albuquerque_clearsky['ghi'] > 0,
        pd.Series(False, index=albuquerque_clearsky.index),
        seasonal_split=None) is system.Tracker.UNKNOWN
    assert system.is_tracking_envelope(winter_perturbed['ghi'],
                                       albuquerque_clearsky['ghi'] > 0,
                                       pd.Series(
                                           False,
                                           index=albuquerque_clearsky.index),
                                       seasonal_split=None,
                                       fit_median=False)
    # empty seasons should give Tracker.UNKNOWN
    with pytest.warns(UserWarning):
        assert system.is_tracking_envelope(
            albuquerque_clearsky['ghi'],
            albuquerque_clearsky['ghi'] > 0,
            pd.Series(False, index=albuquerque_clearsky.index),
            seasonal_split={
                'winter': [],
                'summer': []
            }) is system.Tracker.UNKNOWN
Ejemplo n.º 13
0
def test_full_year_tracking_envelope(albuquerque_clearsky):
    """A full year of GHI should be identified as FIXED."""
    assert system.is_tracking_envelope(
        albuquerque_clearsky['ghi'], albuquerque_clearsky['ghi'] > 0,
        pd.Series(False,
                  index=albuquerque_clearsky.index)) is system.Tracker.FIXED