Skip to content

check_observation_horizon_not_fitted

yohou.testing.transformer.check_observation_horizon_not_fitted(transformer, X)

Check observation_horizon behavior before fit().

For transformers that inherit the base observation_horizon (no override), accessing it before fit() should raise NotFittedError. Transformers that override observation_horizon as a @property (computed from constructor params) are allowed to return a value before fit.

Parameters

Name Type Description Default
transformer BaseTransformer

Unfitted transformer instance

required
X DataFrame

Test data

required

Raises

Type Description
AssertionError

If observation_horizon returns a non-zero value before fit without an explicit property override

Source Code

Show/Hide source
def check_observation_horizon_not_fitted(transformer, X: pl.DataFrame) -> None:
    """Check observation_horizon behavior before fit().

    For transformers that inherit the base observation_horizon (no override),
    accessing it before fit() should raise NotFittedError. Transformers that
    override observation_horizon as a @property (computed from constructor
    params) are allowed to return a value before fit.

    Parameters
    ----------
    transformer : BaseTransformer
        Unfitted transformer instance
    X : pl.DataFrame
        Test data

    Raises
    ------
    AssertionError
        If observation_horizon returns a non-zero value before fit without
        an explicit property override

    """
    transformer_clone = clone(transformer)

    try:
        horizon = transformer_clone.observation_horizon
        # Accessible before fit: either stateless (0) or @property override.
        # Both are valid.  Property overrides compute from constructor params.
        if horizon < 0:
            raise AssertionError(
                f"{transformer_clone.__class__.__name__}.observation_horizon "
                f"returned {horizon} before fit(). Must be non-negative."
            )
    except NotFittedError:
        # Expected for transformers using the base property (no override)
        pass