Skip to content

check_scorer_parameter_validation

yohou.testing.check_scorer_parameter_validation(scorer_class, param_name, invalid_value, error_match=None)

Check parameter validation raises ValueError for invalid inputs.

Tests that scorer._validate_parameters() properly rejects invalid inputs when fit() is called (parameter validation happens in fit(), not score()).

Parameters

Name Type Description Default
scorer_class type

Scorer class

required
param_name str

Parameter name to test

required
invalid_value any

Invalid value that should trigger ValueError

required
error_match str

Expected substring in error message

None

Raises

Type Description
AssertionError

If invalid value is accepted

Source Code

Source code in src/yohou/testing/scorer.py
def check_scorer_parameter_validation(
    scorer_class,
    param_name: str,
    invalid_value: Any,
    error_match: str | None = None,
) -> None:
    """Check parameter validation raises ValueError for invalid inputs.

    Tests that scorer._validate_parameters() properly rejects invalid inputs
    when fit() is called (parameter validation happens in fit(), not score()).

    Parameters
    ----------
    scorer_class : type
        Scorer class
    param_name : str
        Parameter name to test
    invalid_value : any
        Invalid value that should trigger ValueError
    error_match : str, optional
        Expected substring in error message

    Raises
    ------
    AssertionError
        If invalid value is accepted

    """
    # Parameter validation happens in fit(), so minimal truth data is enough
    y_truth = pl.DataFrame({
        "time": [datetime.datetime(2020, 1, i) for i in range(1, 11)],
        "value": [float(i) for i in range(10)],
    })

    # Create scorer with invalid parameter
    params = {param_name: invalid_value}
    scorer = scorer_class(**params)

    # Always call fit() to trigger parameter validation (sklearn pattern)
    # Parameter validation happens in fit(), not score()
    try:
        scorer.fit(y_truth)
        raise AssertionError(f"{scorer_class.__name__}: invalid {param_name}={invalid_value} was accepted in fit()")
    except (ValueError, TypeError) as e:
        # Expected - validation should raise ValueError or TypeError
        if error_match is None or error_match in str(e):
            return  # Test passed
        raise AssertionError(f"Expected error containing '{error_match}', got: {e}") from e