SPB Git

spb/wp39_uqo

Public
2.2 KB · 46 lines python
1import datetime as dt23import polars as pl45from wp39.labels import build_quarter_table, finalize_labels, match_release_dates6from wp39.pit_fundamentals import asof_latest_available7from wp39.samples import apply_admissibility, event_cutoffs8910def test_no_future_fundamentals(toy_wide):11    cut = pl.DataFrame({"entity_id": ["frd:AAA"] * 3, "cutoff": [dt.date(2015, 5, 1), dt.date(2015, 5, 11), dt.date(2015, 5, 12)]})12    j = asof_latest_available(toy_wide, cut)13    # period end 2015-03-31, filing 2015-05-10, available 2015-05-1114    assert j["pit_period_end"].to_list() == [None, dt.date(2015, 3, 31), dt.date(2015, 3, 31)]15    assert j.filter(pl.col("pit_period_end").is_not_null())["pit_ok"].all()161718def test_join_key_is_available_at_not_period_end(toy_wide):19    cut = pl.DataFrame({"entity_id": ["frd:AAA"], "cutoff": [dt.date(2015, 4, 15)]})  # after period end, before filing20    j = asof_latest_available(toy_wide, cut)21    assert j["pit_period_end"][0] is None222324def test_cutoff_precedes_release_and_filing(toy_wide, toy_events):25    w = match_release_dates(toy_wide, toy_events)26    cut = apply_admissibility(event_cutoffs(w, [20, 5, 1]))27    assert (cut["cutoff"] < cut["A_q"]).all() and (cut["cutoff"] < cut["F_q"]).all()28    assert cut.filter(pl.col("A_prev").is_not_null()).select((pl.col("cutoff") > pl.col("A_prev")).all()).item()293031def test_observed_at_not_used():32    import inspect33    from wp39 import labels, pit_fundamentals, samples34    src = inspect.getsource(samples) + inspect.getsource(labels) + inspect.getsource(pit_fundamentals.asof_latest_available)35    assert "observed_at" not in src.replace("observed_at\",", "")  # only in the column list of the extract363738def test_expectation_uses_only_prior_quarters(toy_wide, toy_events):39    w = match_release_dates(toy_wide, toy_events)40    q = finalize_labels(build_quarter_table(w))41    r = q.filter((pl.col("entity_id") == "frd:AAA") & (pl.col("qidx") == 9)).row(0, named=True)42    x = toy_wide.filter(pl.col("entity_id") == "frd:AAA").sort("qidx")["op_inc"].to_list()43    drift = sum(x[9 - 1 - k] - x[9 - 5 - k] for k in range(4)) / 444    assert abs(r["E_op_inc"] - (x[5] + drift)) < 1e-945    assert q.filter(pl.col("qidx") < 8)["E_op_inc"].null_count() == q.filter(pl.col("qidx") < 8).height46
Files · main
Menu

Theme