gam 0.1.17

Generalized penalized likelihood engine
Documentation
from __future__ import annotations

import pytest

from gamfit._tables import normalize_table, restore_output_table


def test_normalize_table_rejects_zero_row_mapping() -> None:
    with pytest.raises(ValueError, match="table data cannot be empty"):
        normalize_table({"x": [], "y": []})


def test_restore_output_table_rejects_unknown_return_type() -> None:
    with pytest.raises(ValueError, match="unsupported return_type 'arrowish'"):
        restore_output_table(
            {"mean": [1.0], "eta": [0.0]},
            requested="arrowish",
            input_kind="mapping",
            training_kind=None,
        )


def test_restore_output_table_supports_pyarrow_output() -> None:
    pyarrow = pytest.importorskip("pyarrow")

    restored = restore_output_table(
        {"mean": [1.0, 2.0], "eta": [0.0, 0.5]},
        requested="pyarrow",
        input_kind="mapping",
        training_kind=None,
    )

    assert isinstance(restored, pyarrow.Table)
    assert restored.column_names == ["mean", "eta"]
    assert restored.to_pydict() == {"mean": [1.0, 2.0], "eta": [0.0, 0.5]}


def test_restore_output_table_prefers_pyarrow_training_kind() -> None:
    pyarrow = pytest.importorskip("pyarrow")

    restored = restore_output_table(
        {"mean": [1.0], "eta": [0.0]},
        requested=None,
        input_kind="mapping",
        training_kind="pyarrow",
    )

    assert isinstance(restored, pyarrow.Table)