SPB Git

spb/wp35_uqo

Public
2.7 KB · 47 lines python
1import numpy as np, pandas as pd, pytest2from pathlib import Path3from wp35.harmonization import seshat as S4ROOT = Path(__file__).resolve().parents[1]5PROC = ROOT / "data" / "processed"6needs_data = pytest.mark.skipif(not (PROC / "seshat_facts.parquet").exists(), reason="processed data not built")78def test_presence_coding_rules():9    assert S.code_presence("P")[0] == 1 and S.code_presence("IP") == (1.0, True, False, False)10    assert S.code_presence("A")[0] == 0 and S.code_presence("IA")[1] is True11    assert S.code_presence("A~P") == (0.5, False, True, False)12    for v in ["SU", "U", "unknown", None, np.nan, ""]:13        assert np.isnan(S.code_presence(v)[0]) and not S.code_presence(v)[3]14    assert S.code_presence("land")[3] is True   # unparsed, logged, never zero1516def test_geometric_midpoint_and_bounds():17    df = pd.DataFrame({"sheet": ["Social complexity"], "section": ["sc"], "seshat_region": ["x"], "polity_number": [1],18                       "polity_id": ["p"], "variable_name": ["polity_population"], "value_from": [100], "value_to": [400],19                       "year_from": [np.nan], "year_to": [np.nan], "is_disputed": [False], "is_uncertain": [False]})20    f = S.build_facts({"Social complexity": df, "Warfare": df.iloc[0:0], "Religion": df.iloc[0:0], "General": df.iloc[0:0]})21    assert f.value.iloc[0] == pytest.approx(200.0) and f.value_lo.iloc[0] == 100 and f.value_hi.iloc[0] == 400 and not f.dated.iloc[0]2223@needs_data24def test_no_zero_for_missing_and_counts_match_registry():25    facts = pd.read_parquet(PROC / "seshat_facts.parquet")26    assert facts.value.isna().sum() > 0            # unknowns stay missing27    assert (facts.loc[facts.variable == "polity_population", "value"].dropna() > 0).all()28    crisis = pd.read_parquet(PROC / "seshat_crisis.parquet")29    assert len(crisis) == 166 and crisis.polity_id.nunique() == 15030    assert crisis.y1_severity.between(0, 1).all()31    meta = pd.read_parquet(PROC / "seshat_polity_meta.parquet")32    assert len(meta) == 626 and meta.macro_region.notna().all() and meta.era.notna().all()3334@needs_data35def test_modern_events_are_sparse_and_in_last_regime_year():36    p = pd.read_parquet(PROC / "modern_panel.parquet")37    assert 0 < p.y6_irregular_regime_end.mean() < 0.138    fra = p[p.country_text_id == "FRA"].set_index("year")39    assert fra.loc[1939, "y6_irregular_regime_end"] == 1.0 and fra.loc[1938, "y6_irregular_regime_end"] == 0.040    assert fra.loc[1958, "y6_irregular_regime_end"] == 0.0   # Fourth Republic ended by a directed process (type 10)4142@needs_data43def test_dplace_levels():44    d = pd.read_parquet(PROC / "dplace_ea_societies.parquet")45    assert len(d) == 1291 and d.jurisdictional_hierarchy_beyond.dropna().between(0, 4).all()46    assert d.Family_ID.notna().all()47
Files · 39ef4252c6e9baf1f0a3a4809ca1ab5579d2895d
Menu

Theme