Skip to content

check_observe_transform_equivalence

yohou.testing.transformer.check_observe_transform_equivalence(transformer, X, y=None)

Check observe().transform() == fit().transform() for same final state.

For the same final data state, using observe() should produce the same transform output as using fit() directly.

Parameters

Name Type Description Default
transformer BaseTransformer

Unfitted transformer

required
X DataFrame

Training data

required
y DataFrame

Target data

None

Raises

Type Description
AssertionError

If update and fit paths produce different results

Source Code

Show/Hide source
def check_observe_transform_equivalence(transformer, X: pl.DataFrame, y: pl.DataFrame | None = None) -> None:
    """Check observe().transform() == fit().transform() for same final state.

    For the same final data state, using observe() should produce the same
    transform output as using fit() directly.

    Parameters
    ----------
    transformer : BaseTransformer
        Unfitted transformer
    X : pl.DataFrame
        Training data
    y : pl.DataFrame, optional
        Target data

    Raises
    ------
    AssertionError
        If update and fit paths produce different results

    """
    # Split data
    X_first, X_second = train_test_split(X, test_size=0.5, shuffle=False)

    # Path 1: fit on first, update with second
    transformer1 = clone(transformer)
    transformer1.fit(X_first, y)
    transformer1.observe(X_second)
    X_trans1 = transformer1.transform(X_second)

    # Path 2: fit on all data
    transformer2 = clone(transformer)
    transformer2.fit(X, y)
    X_trans2 = transformer2.transform(X_second)

    # Results should be equivalent
    assert_frame_equal(X_trans1, X_trans2, rel_tol=1e-6, abs_tol=1e-8)