Skip to content

Commit

Permalink
[MNT] Hotfix tag scitype:y typo (#1449)
Browse files Browse the repository at this point in the history
  • Loading branch information
Martin Walter committed Sep 27, 2021
1 parent de73f22 commit 1f7a7b0
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 20 deletions.
27 changes: 18 additions & 9 deletions sktime/forecasting/tests/test_all_forecasters.py
Expand Up @@ -62,8 +62,9 @@
def test_get_fitted_params(Forecaster):
"""Test get_fitted_params."""
f = _construct_instance(Forecaster)
columns = _get_n_columns(f.get_tag("y:scitype"))
columns = _get_n_columns(f.get_tag("scitype:y"))
for n_columns in columns:
f = _construct_instance(Forecaster)
y_train = _make_series(n_columns=n_columns)
f.fit(y_train, fh=FH0)
try:
Expand Down Expand Up @@ -130,9 +131,10 @@ def test_y_invalid_type_raises_error(Forecaster, y):
def test_X_invalid_type_raises_error(Forecaster, X):
"""Test that invalid X input types raise error."""
f = _construct_instance(Forecaster)
n_columns_list = _get_n_columns(f.get_tag("y:scitype"))
n_columns_list = _get_n_columns(f.get_tag("scitype:y"))

for n_columns in n_columns_list:
f = _construct_instance(Forecaster)
y_train = _make_series(n_columns=n_columns)
try:
with pytest.raises(TypeError, match=r"type"):
Expand All @@ -150,9 +152,10 @@ def test_X_invalid_type_raises_error(Forecaster, X):
def test_predict_time_index(Forecaster, index_type, fh_type, is_relative, steps):
"""Check that predicted time index matches forecasting horizon."""
f = _construct_instance(Forecaster)
n_columns_list = _get_n_columns(f.get_tag("y:scitype"))
n_columns_list = _get_n_columns(f.get_tag("scitype:y"))

for n_columns in n_columns_list:
f = _construct_instance(Forecaster)
y_train = _make_series(
n_columns=n_columns, index_type=index_type, n_timepoints=50
)
Expand All @@ -175,13 +178,14 @@ def test_predict_time_index(Forecaster, index_type, fh_type, is_relative, steps)
def test_predict_time_index_with_X(Forecaster, index_type, fh_type, is_relative, steps):
"""Check that predicted time index matches forecasting horizon."""
f = _construct_instance(Forecaster)
n_columns_list = _get_n_columns(f.get_tag("y:scitype"))
n_columns_list = _get_n_columns(f.get_tag("scitype:y"))

z, X = make_forecasting_problem(index_type=index_type, make_X=True)

# Some estimators may not support all time index types and fh types, hence we
# need to catch NotImplementedErrors.
for n_columns in n_columns_list:
f = _construct_instance(Forecaster)
y = _make_series(n_columns=n_columns, index_type=index_type)
cutoff = y.index[len(y) // 2]
fh = _make_fh(cutoff, steps, fh_type, is_relative)
Expand All @@ -205,9 +209,10 @@ def test_predict_time_index_in_sample_full(
):
"""Check that predicted time index equals fh for full in-sample predictions."""
f = _construct_instance(Forecaster)
n_columns_list = _get_n_columns(f.get_tag("y:scitype"))
n_columns_list = _get_n_columns(f.get_tag("scitype:y"))

for n_columns in n_columns_list:
f = _construct_instance(Forecaster)
y_train = _make_series(n_columns=n_columns, index_type=index_type)
cutoff = y_train.index[-1]
steps = -np.arange(len(y_train))
Expand Down Expand Up @@ -265,9 +270,10 @@ def test_predict_pred_interval(Forecaster, fh, alpha):
and no NotImplementedError is raised when asking predict for pred.int
"""
f = _construct_instance(Forecaster)
n_columns_list = _get_n_columns(f.get_tag("y:scitype"))
n_columns_list = _get_n_columns(f.get_tag("scitype:y"))

for n_columns in n_columns_list:
f = _construct_instance(Forecaster)
y_train = _make_series(n_columns=n_columns)
f.fit(y_train, fh=fh)
if f.get_tag("capability:pred_int"):
Expand All @@ -284,9 +290,10 @@ def test_predict_pred_interval(Forecaster, fh, alpha):
def test_score(Forecaster, fh):
"""Check score method."""
f = _construct_instance(Forecaster)
n_columns_list = _get_n_columns(f.get_tag("y:scitype"))
n_columns_list = _get_n_columns(f.get_tag("scitype:y"))

for n_columns in n_columns_list:
f = _construct_instance(Forecaster)
y = _make_series(n_columns=n_columns)
y_train, y_test = temporal_train_test_split(y)
f.fit(y_train, fh=fh)
Expand All @@ -309,9 +316,10 @@ def test_score(Forecaster, fh):
def test_update_predict_single(Forecaster, fh, update_params):
"""Check correct time index of update-predict."""
f = _construct_instance(Forecaster)
n_columns_list = _get_n_columns(f.get_tag("y:scitype"))
n_columns_list = _get_n_columns(f.get_tag("scitype:y"))

for n_columns in n_columns_list:
f = _construct_instance(Forecaster)
y = _make_series(n_columns=n_columns)
y_train, y_test = temporal_train_test_split(y)
f.fit(y_train, fh=fh)
Expand All @@ -323,9 +331,10 @@ def _check_update_predict_predicted_index(
Forecaster, fh, window_length, step_length, update_params
):
f = _construct_instance(Forecaster)
n_columns_list = _get_n_columns(f.get_tag("y:scitype"))
n_columns_list = _get_n_columns(f.get_tag("scitype:y"))

for n_columns in n_columns_list:
f = _construct_instance(Forecaster)
y_train = _make_series(
n_columns=n_columns, all_positive=True, index_type="datetime"
)
Expand Down
17 changes: 10 additions & 7 deletions sktime/forecasting/tests/test_sktime_forecasters.py
Expand Up @@ -55,9 +55,10 @@ def test_oh_setting(Forecaster):
"""Check cuttoff and _y."""
# check _y and cutoff is None after construction
f = _construct_instance(Forecaster)
n_columns_list = _get_n_columns(f.get_tag("y:scitype"))
n_columns_list = _get_n_columns(f.get_tag("scitype:y"))

for n_columns in n_columns_list:
f = _construct_instance(Forecaster)
y = _make_series(n_columns=n_columns)
y_train, y_test = temporal_train_test_split(y, train_size=0.75)

Expand Down Expand Up @@ -143,9 +144,10 @@ def test_different_fh_in_fit_and_predict_req(Forecaster):
def test_no_fh_opt(Forecaster):
"""Check if fh is optional in fit."""
f = _construct_instance(Forecaster)
n_columns_list = _get_n_columns(f.get_tag("y:scitype"))
n_columns_list = _get_n_columns(f.get_tag("scitype:y"))

for n_columns in n_columns_list:
f = _construct_instance(Forecaster)
y_train = _make_series(n_columns=n_columns)
f.fit(y_train)
# not passing fh to either fit or predict raises error
Expand All @@ -157,11 +159,11 @@ def test_no_fh_opt(Forecaster):
def test_fh_in_fit_opt(Forecaster):
"""Check if fh is optional in fit."""
f = _construct_instance(Forecaster)
n_columns_list = _get_n_columns(f.get_tag("y:scitype"))
n_columns_list = _get_n_columns(f.get_tag("scitype:y"))

for n_columns in n_columns_list:
y_train = _make_series(n_columns=n_columns)
f = _construct_instance(Forecaster)
y_train = _make_series(n_columns=n_columns)
f.fit(y_train, fh=FH0)
np.testing.assert_array_equal(f.fh, FH0)
f.predict()
Expand All @@ -172,12 +174,12 @@ def test_fh_in_fit_opt(Forecaster):
def test_fh_in_predict_opt(Forecaster):
"""Check if fh is optional in predict."""
f = _construct_instance(Forecaster)
n_columns_list = _get_n_columns(f.get_tag("y:scitype"))
n_columns_list = _get_n_columns(f.get_tag("scitype:y"))

for n_columns in n_columns_list:
f = _construct_instance(Forecaster)
y_train = _make_series(n_columns=n_columns)
y_train = _make_series(n_columns=1)
f = _construct_instance(Forecaster)
f.fit(y_train)
f.predict(FH0)
np.testing.assert_array_equal(f.fh, FH0)
Expand All @@ -187,9 +189,10 @@ def test_fh_in_predict_opt(Forecaster):
def test_same_fh_in_fit_and_predict_opt(Forecaster):
"""Check if fh is the same in fit and predict."""
f = _construct_instance(Forecaster)
n_columns_list = _get_n_columns(f.get_tag("y:scitype"))
n_columns_list = _get_n_columns(f.get_tag("scitype:y"))

for n_columns in n_columns_list:
f = _construct_instance(Forecaster)
y_train = _make_series(n_columns=n_columns)

# passing the same fh to both fit and predict works
Expand Down
32 changes: 28 additions & 4 deletions sktime/utils/_testing/forecasting.py
Expand Up @@ -29,11 +29,13 @@ def _get_n_columns(tag):
n_columns_list = [2]
elif tag == "both":
n_columns_list = [1, 2]
else:
raise ValueError(f"Unexpected tag {tag}.")
return n_columns_list


def _get_expected_index_for_update_predict(y, fh, step_length):
"""Helper function to compute expected time index from `update_predict`"""
"""Compute expected time index from `update_predict`."""
# time points at which to make predictions
fh = check_fh(fh)
index = y.index
Expand Down Expand Up @@ -69,8 +71,7 @@ def _get_expected_index_for_update_predict(y, fh, step_length):


def _generate_polynomial_series(n, order, coefs=None):
"""Helper function to generate polynomial series of given order and
coefficients"""
"""Generate polynomial series of given order and coefficients."""
if coefs is None:
coefs = np.ones((order + 1, 1))
x = np.vander(np.arange(n), N=order + 1).dot(coefs)
Expand All @@ -85,6 +86,29 @@ def make_forecasting_problem(
n_columns=2,
random_state=None,
):
"""Return test data for forecasting tests.
Parameters
----------
n_timepoints : int, optional
Lenght of data, by default 50
all_positive : bool, optional
Only positive values or not, by default True
index_type : e.g. pd.PeriodIndex, optional
pandas Index type, by default None
make_X : bool, optional
Should X data also be returned, by default False
n_columns : int, optional
Number of columns of X, by default 2
random_state : inst, str, float, optional
Set seed of random state, by default None
Returns
-------
ps.Series, pd.DataFrame
y, if not make_X
y, X if make_X
"""
y = _make_series(
n_timepoints=n_timepoints,
n_columns=1,
Expand Down Expand Up @@ -115,7 +139,7 @@ def _assert_correct_pred_time_index(y_pred_index, cutoff, fh):


def _make_fh(cutoff, steps, fh_type, is_relative):
"""Helper function to construct forecasting horizons for testing"""
"""Construct forecasting horizons for testing."""
from sktime.forecasting.tests._config import INDEX_TYPE_LOOKUP

fh_class = INDEX_TYPE_LOOKUP[fh_type]
Expand Down

0 comments on commit 1f7a7b0

Please sign in to comment.