Changelog¶
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased¶
0.1.0 - 2026-06-17¶
Added¶
- Six-step SNHT homogenization pipeline (
Rucola.run()/.normalize()) implementing González-Rouco et al. (2001), including the step 6c diagnostic re-test of the doubly-corrected series.HCC6is assigned only when consensus confirms the series is homogeneous after the two González-Rouco corrections; otherwise the station is classifiedICC6. The re-test result is stored underdetections_by_step[63]for inspection and never applied as a correction. - Six statistical breakpoint tests: SNHT (Alexandersson 1986), Buishand range (Buishand 1982), Pettitt (Pettitt 1979), Worsley likelihood ratio (Worsley 1979), Easterling–Peterson two-phase regression (Easterling & Peterson 1995), and STARS sequential regime-shift (Rodionov 2004). STARS is configurable via
l(minimum regime length / RSI confirmation window). ratioanddifferencecorrection modes for precipitation and temperature respectively.- Constructors:
Rucola.from_polars,Rucola.from_csv,Rucola.from_duckdb.Rucola.__init__validates inputs for duplicate dates and multiple parameters with fail-fastValueErrors. NormalizationConfigwithconsensus,tiebreak,break_window_years,min_correction_magnitude,min_relative_signal,min_years_from_end,max_corrections_per_station,predicate, andoverridescontrols.min_relative_signalrejects test results below a configurable ratio of test statistic to critical value, even when significant; mirrored onHomogenizationTest.- Composable break predicates:
YearBetween,StationIn,StepIn,MagnitudeAbove,TestSignificant,SignalAbove,NSignificantAbove,NeighborCountAbove, combinable with&/|/~and fully serializable viato_dict/BreakPredicate.from_dict. DetectionResultandHomogenizationResultresult types withto_json/from_jsonround-trip serialization.DetectionRecord.break_yearis typedint | Noneand isNonewhen no test qualified at that step.- Winsorization and annual aggregation helpers (
winsorize_outliers,compute_annual_totals,compute_annual_means). - DWD integration tests for Saxony precipitation (380 stations) and temperature (58 stations) with locked expected values.
- pytest marker scheme:
unit,slow,integration. poetasks:test,test-unit,test-slow,test-integration,test-all,check,lint,format,type,docs-serve,docs-build,audit,deptry,zizmor,coverage.- Interactive
notebooks/saxony_station_homogenization.py(marimo) with colour-coded group stat cards, group-breakdown stacked-bar chart, colour-coded category column on the detection summary table, colour emoji prefixes on station-picker labels, and a "Only stations with corrections" toggle for the Step 4 chart picker.