SPB Git

spb/wp39_uqo

Public
1.8 KB · 40 lines python
1import datetime as dt2import os3import sys4from pathlib import Path56import polars as pl7import pytest89sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "src"))1011LIVE = os.environ.get("WP39_LIVE") == "1"12live = pytest.mark.skipif(not LIVE, reason="set WP39_LIVE=1 to run live FinData tests")131415@pytest.fixture16def toy_wide():17    """Two firms, regular quarterly calendar, filing 40 d after period end."""18    rows = []19    for e in ("frd:AAA", "frd:BBB"):20        base = 100.0 if e == "frd:AAA" else 50.021        for i in range(14):22            pe = dt.date(2015, 3, 31) + dt.timedelta(days=int(91.3 * i))23            fd = pe + dt.timedelta(days=40)24            rows.append({"entity_id": e, "security_id": f"firstrate:stock:{e[4:]}", "fiscal_period_end": pe,25                         "fiscal_year": pe.year, "fiscal_period": f"q{(pe.month - 1) // 3 + 1}", "filing_date": fd,26                         "available_date": fd + dt.timedelta(days=1), "op_inc": base + i + (5 if (i % 4 == 0) else 0),27                         "net_inc": base * 0.7 + i, "cash_op": base * 1.1 + i, "rev": base * 10 + 10 * i,28                         "assets_tot": base * 20, "assets_c": base * 5, "liab_c": base * 3, "roa": 0.02 + 0.001 * i,29                         "intr_cover": 5.0, "shares": 1000.0, "gp": base * 4, "debt": base * 6, "cash": base,30                         "capex": base * 0.2, "research_dev": base * 0.1, "qidx": i})31    return pl.DataFrame(rows)323334@pytest.fixture35def toy_events(toy_wide):36    ev = toy_wide.select(["entity_id", "filing_date"]).with_columns(37        (pl.col("filing_date") - pl.duration(days=1)).alias("event_date"), pl.lit("after_close").alias("release_time"),38        pl.lit(None, dtype=pl.Float64).alias("eps_estimate"), pl.lit(None, dtype=pl.Float64).alias("eps_reported")).drop("filing_date")39    return ev40
Files · main
Menu

Theme