Esempio n. 1
0
def check_get_params(Estimator):
    # Check get params works correctly
    estimator = _construct_instance(Estimator)
    params = estimator.get_params()
    assert isinstance(params, dict)
    _check_get_params_invariance(estimator.__class__.__name__, estimator)
Esempio n. 2
0
def test_predict_time_index(Forecaster, fh, y_train):
    f = _construct_instance(Forecaster)
    f.fit(y_train, fh)
    y_pred = f.predict()
    assert_correct_pred_time_index(y_pred, y_train, fh)
Esempio n. 3
0
def test_update_predict_single(Forecaster, fh):
    f = _construct_instance(Forecaster)
    f.fit(y_train, fh)
    y_pred = f.update_predict_single(y_test)
    assert_correct_pred_time_index(y_pred, y_test, fh)
Esempio n. 4
0
def test_no_fh_in_fit_req(Forecaster):
    f = _construct_instance(Forecaster)
    # fh required in fit, raises error if not passed
    with pytest.raises(ValueError):
        f.fit(y_train)
Esempio n. 5
0
def test_same_fh_in_fit_and_predict_req(Forecaster):
    f = _construct_instance(Forecaster)
    f.fit(y_train, FH0)
    np.testing.assert_array_equal(f.fh, FH0)
    f.predict(FH0)
    np.testing.assert_array_equal(f.fh, FH0)
Esempio n. 6
0
def test_update_predict_single(Forecaster, fh):
    # Check correct time index of update-predict
    f = _construct_instance(Forecaster)
    f.fit(y_train, fh=fh)
    y_pred = f.update_predict_single(y_test)
    assert_correct_pred_time_index(y_pred.index, y_test.index[-1], fh)
Esempio n. 7
0
def test_same_fh_in_fit_and_predict_opt(Forecaster):
    f = _construct_instance(Forecaster)
    # passing the same fh to both fit and predict works
    f.fit(y_train, FH0)
    f.predict(FH0)
    np.testing.assert_array_equal(f.fh, FH0)
Esempio n. 8
0
def check_constructor(Estimator):
    # Check that the constructor behaves correctly
    estimator = _construct_instance(Estimator)

    # Check that init does not construct object of other class than itself
    assert isinstance(estimator, Estimator)

    # Ensure that each parameter is set in init
    init_params = _get_args(type(estimator).__init__)
    invalid_attr = set(init_params) - set(vars(estimator)) - {"self"}
    assert not invalid_attr, (
        "Estimator %s should store all parameters"
        " as an attribute during init. Did not find "
        "attributes `%s`." %
        (estimator.__class__.__name__, sorted(invalid_attr)))

    # Ensure that init does nothing but set parameters
    # No logic/interaction with other parameters
    def param_filter(p):
        """Identify hyper parameters of an estimator"""
        return (p.name != 'self' and p.kind != p.VAR_KEYWORD
                and p.kind != p.VAR_POSITIONAL)

    init_params = [
        p for p in signature(estimator.__init__).parameters.values()
        if param_filter(p)
    ]

    params = estimator.get_params()

    # Filter out required parameters with no default value and parameters
    # set for running tests
    required_params = getattr(estimator, '_required_parameters', [])
    test_config_params = ESTIMATOR_TEST_PARAMS.get(Estimator, {}).keys()

    init_params = [
        param for param in init_params if param.name not in required_params
        and param.name not in test_config_params
    ]

    for param in init_params:
        assert param.default != param.empty, (
            "parameter `%s` for %s has no default value and is not "
            "included in `_required_parameters`" %
            (param.name, estimator.__class__.__name__))
        if type(param.default) is type:
            assert param.default in [np.float64, np.int64]
        else:
            assert (type(param.default) in [
                str, int, float, bool, tuple,
                type(None), np.float64, types.FunctionType, joblib.Memory
            ])

        param_value = params[param.name]
        if isinstance(param_value, np.ndarray):
            np.testing.assert_array_equal(param_value, param.default)
        else:
            if bool(
                    isinstance(param_value, numbers.Real)
                    and np.isnan(param_value)):
                # Allows to set default parameters to np.nan
                assert param_value is param.default, param.name
            else:
                assert param_value == param.default, param.name
Esempio n. 9
0
def test_no_fh_opt(Forecaster):
    f = _construct_instance(Forecaster)
    f.fit(y_train)
    # not passing fh to either fit or predict raises error
    with pytest.raises(ValueError):
        f.predict()
Esempio n. 10
0
def _construct_fit(Estimator, **kwargs):
    estimator = _construct_instance(Estimator)
    args = _make_args(estimator, "fit", **kwargs)[:2]
    return estimator.fit(*args)
Esempio n. 11
0
def check_repr(Estimator):
    # Check we can call repr
    estimator = _construct_instance(Estimator)
    repr(estimator)
Esempio n. 12
0
def check_transform_inverse_transform_equivalent(Estimator):
    estimator = _construct_instance(Estimator)
    X = _make_args(estimator, "fit")[0]
    Xt = estimator.fit_transform(X)
    Xit = estimator.inverse_transform(Xt)
    _assert_array_almost_equal(X, Xit)
Esempio n. 13
0
def test_y_invalid_type_raises_error(Forecaster, y):
    with pytest.raises(TypeError, match=r"type"):
        f = _construct_instance(Forecaster)
        f.fit(y, fh=FH0)
Esempio n. 14
0
def test_y_multivariate_raises_error(Forecaster):
    # Check that multivariate y raises an appropriate error message.
    y = _make_series(n_columns=2)
    with pytest.raises(ValueError, match=r"univariate"):
        f = _construct_instance(Forecaster)
        f.fit(y, fh=FH0)
Esempio n. 15
0
def check_set_params(Estimator):
    # Check set_params works correctly
    estimator = _construct_instance(Estimator)
    params = estimator.get_params()
    assert estimator.set_params(**params) is estimator
    _check_set_params(estimator.__class__.__name__, estimator)
Esempio n. 16
0
def test_fh_in_predict_opt(Forecaster):
    f = _construct_instance(Forecaster)
    f.fit(y_train)
    f.predict(FH0)
    np.testing.assert_array_equal(f.fh, FH0)
Esempio n. 17
0
def check_clone(Estimator):
    # Check we can call clone from scikit-learn
    estimator = _construct_instance(Estimator)
    clone(estimator)
Esempio n. 18
0
def test_transformed_data_has_same_index_as_input_data(Transformer):
    transformer = _construct_instance(Transformer)
    X, y = _make_args(transformer, "fit")
    Xt = transformer.fit_transform(X, y)
    np.testing.assert_array_equal(X.index, Xt.index)