1#!/usr/bin/env python2"""Step 05 — descriptive figures (fig01, fig03, fig04) and tables (tab01-tab03)."""3import json4from ucml import descriptives5s = descriptives.run()6c, d = s["coverage"], s["dynamics"]7print(json.dumps({8 "S0": s["S0_n"], "S1": s["S1_n"], "S2": s["S2_n"], "S2L": s["S2L_n"],9 "active_canonical_auto": s["active_canonical_auto_at_snapshot"],10 "active_s2l_range_full_days": [c["active_s2l_min"], c["active_s2l_max"]],11 "entries_per_day_mean": round(c["entries_per_full_day_mean"], 1),12 "exits_per_day_mean": round(c["exits_per_full_day_mean_confirmable"], 1),13 "crawl_cycles_per_day_mean": round(c["crawl_cycles_per_full_day_mean"], 2),14 "max_gap_hours": round(c["max_gap_hours_same_source"], 1),15 "S2_completed_median_days": round(d["S2_completed_duration_median_days"], 1),16 "S2_share_with_cut": round(d["S2_share_with_cut"], 4),17 "S2_first_cut_median_pct": round(d["S2_first_cut_pct_median"], 2),18 "S2L_left_censored_share": round(d["S2L_left_censored_share"], 4),19}, indent=2))20