diff --git a/CHANGES.md b/CHANGES.md index caad03fc1..bea38660b 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,6 +2,11 @@ ## __NEXT__ +### Bug fixes + +* filter: Fix unhandled `ValueError` with `--group-by-weights` when no sequences pass earlier filters. [#2032] @victorlin + +[#2032]: https://github.com/nextstrain/augur/issues/2032 ## 34.1.0 (20 July 2026) diff --git a/augur/filter/subsample.py b/augur/filter/subsample.py index 73c476bb2..52602bd5c 100644 --- a/augur/filter/subsample.py +++ b/augur/filter/subsample.py @@ -321,6 +321,12 @@ def get_weighted_group_sizes( ) -> Dict[Group, int]: """Return target group sizes based on weights defined in ``weights_file``. """ + if not records_per_group: + if output_sizes_file: + with open_file(output_sizes_file, "w", newline="") as f: + f.write("") + return {} + groups = records_per_group.keys() weights = read_weights_file(weights_file) diff --git a/tests/filter/test_subsample.py b/tests/filter/test_subsample.py index e3c2c569c..2e6888ebe 100644 --- a/tests/filter/test_subsample.py +++ b/tests/filter/test_subsample.py @@ -156,3 +156,19 @@ def test_filter_groupby_only_year_month_provided(self, valid_metadata: pd.DataFr 'SEQ_4': ('B', '2020', '2020-01'), 'SEQ_5': ('B', '2020', '2020-01') } + + +class TestWeightedGroupSizes: + def test_get_weighted_group_sizes_empty_records(self, tmp_path): + weights_file = tmp_path / "weights.tsv" + weights_file.write_text("country\tweight\nA\t1\n") + + result = augur.filter.subsample.get_weighted_group_sizes( + records_per_group={}, + group_by=['country', 'year'], + weights_file=str(weights_file), + target_total_size=10, + output_sizes_file=None, + random_seed=None, + ) + assert result == {}