SPB Git

spb/wp26_uqo

Public
2.6 KB · 69 lines python
1# Author: Simon-Pierre Boucher — simon-pierre.boucher@uqo.ca2"""Shared fixtures. Tests run on the SYNTHETIC table (built in memory from the generator, no private data).3``pytest --real`` additionally runs the tests marked ``real`` on data/processed/*."""4from __future__ import annotations56import polars as pl7import pytest89from agentic_valuation.config import PROCESSED, SYNTHETIC, load_config10from agentic_valuation.data.build import build_from_synthetic11from agentic_valuation.data.splits import assign_splits, stratified_subsample12from agentic_valuation.data.synthetic import generate13from agentic_valuation.features.matrix import build_feature_matrix1415SYN_N_BY_SPLIT = {"validation": 40, "test": 60, "holdout": 30}161718def pytest_addoption(parser: pytest.Parser) -> None:19    parser.addoption("--real", action="store_true", default=False, help="also run checks on the real processed data")202122def pytest_configure(config: pytest.Config) -> None:23    config.addinivalue_line("markers", "real: needs data/processed (private); enabled with --real")242526def pytest_collection_modifyitems(config: pytest.Config, items: list[pytest.Item]) -> None:27    if config.getoption("--real"):28        return29    skip = pytest.mark.skip(reason="needs --real and the private processed data")30    for item in items:31        if "real" in item.keywords:32            item.add_marker(skip)333435@pytest.fixture(scope="session")36def cfg() -> dict:37    return load_config("data")383940@pytest.fixture(scope="session")41def syn_analytic() -> pl.DataFrame:42    src = SYNTHETIC / "synthetic_transactions.parquet"43    raw = pl.read_parquet(src) if src.exists() else generate(20_000)44    df, _ = build_from_synthetic(raw)45    return df464748@pytest.fixture(scope="session")49def syn_splits(syn_analytic: pl.DataFrame, cfg: dict) -> pl.DataFrame:50    return assign_splits(syn_analytic, cfg)515253@pytest.fixture(scope="session")54def syn_subsamples(syn_analytic: pl.DataFrame, syn_splits: pl.DataFrame, cfg: dict) -> pl.DataFrame:55    return stratified_subsample(syn_analytic, syn_splits, cfg, n_by_split=SYN_N_BY_SPLIT)565758@pytest.fixture(scope="session")59def syn_matrix(syn_analytic: pl.DataFrame, syn_splits: pl.DataFrame) -> pl.DataFrame:60    return build_feature_matrix(syn_analytic, syn_splits, geo=None, comps_summary=True)616263@pytest.fixture(scope="session")64def real_bundle() -> dict[str, pl.DataFrame]:65    paths = {k: PROCESSED / f"{k}.parquet" for k in ("analytic", "splits", "llm_subsamples", "feature_matrix", "geo_features")}66    if not paths["analytic"].exists():67        pytest.skip("data/processed/analytic.parquet missing")68    return {k: pl.read_parquet(p) for k, p in paths.items() if p.exists()}69
Files · main
Menu

Theme