From 55085c7cb102739fc6e5c82635c770bf9c000e60 Mon Sep 17 00:00:00 2001 From: vahid-ahmadi Date: Sat, 24 Oct 2026 13:53:40 +0100 Subject: [PATCH 1/3] Deal the slowest tests to CI shards by duration, not hash Over 95 runs on 24 October, shard 2/5 averaged 57 minutes (up to 70) against 49 for shard 1/5. Shards are chosen by a hash of each node id, which spreads short tests evenly but not long ones: a 22-minute property test and several of 4 to 7 minutes hashed to shard 2. shard_durations.toml lists the 295 tests that took at least a minute, measured from the logs of eight merge queue runs by .github/test_durations.py. conftest.py deals them out longest first, each to the least loaded shard; every other test keeps its hash. On the measured durations the shards come out at 53 to 55 minutes instead of 48 to 59. Co-Authored-By: Claude Opus 5.5 --- .github/test_durations.py | 90 ++++++ .github/workflows/test-suite.yaml | 7 + changelog.d/ci-balance-test-shards.changed.md | 1 + .../tests/code_health/test_ci_test_shards.py | 74 +++++ policyengine_uk/tests/conftest.py | 58 +++- policyengine_uk/tests/shard_durations.toml | 305 ++++++++++++++++++ 6 files changed, 532 insertions(+), 3 deletions(-) create mode 100644 .github/test_durations.py create mode 100644 changelog.d/ci-balance-test-shards.changed.md create mode 100644 policyengine_uk/tests/shard_durations.toml diff --git a/.github/test_durations.py b/.github/test_durations.py new file mode 100644 index 0000000000..c2e89aedda --- /dev/null +++ b/.github/test_durations.py @@ -0,0 +1,90 @@ +"""Measure the slowest Python tests from CI logs, for shard_durations.toml. + +The shards of the Test job run with ``pytest -v -n 4``, so each finished test +logs a line such as:: + + 2026-10-24T10:57:20.4034260Z [gw0] [ 0%] PASSED path.py::test_name + +GitHub stamps every line with the time it was written. A pytest-xdist worker +runs one test at a time, so the time between two consecutive lines from the +same worker is the second test's duration, set-up and tear-down included. +This reads the logs of one or more shard jobs, saved with:: + + gh run view RUN --log --job JOB > RUN-K.log + +averages each test's duration over the logs it appears in, and prints the +tests that took at least --min-seconds as the TOML table conftest.py reads. + +Standard library only, like the other scripts here. +""" + +import argparse +import re +import statistics +import sys +from collections import defaultdict +from datetime import datetime + +LINE = re.compile( + r"(\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d(?:\.\d+)?)Z " + r"\[(gw\d+)\] \[\s*\d+%\] (?:PASSED|FAILED|SKIPPED|XFAIL|XPASS|ERROR) (.+?)" + # The job's once-a-minute memory report can land on the same line. + r"(?: memory: \d+ MB used, \d+ MB available)? *$" +) +# pytest-xdist logs this once its workers are up; a worker's first test is +# timed from here. +START = re.compile( + r"(\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d(?:\.\d+)?)Z created: \d+/\d+ workers" +) + + +def _time(stamp: str) -> datetime: + # Seven fractional digits: datetime reads at most six. + whole, _, fraction = stamp.partition(".") + return datetime.fromisoformat(f"{whole}.{(fraction + '000000')[:6]}") + + +def durations(lines) -> dict[str, float]: + """Each test's duration in seconds in one shard's log.""" + start = None + last = {} + found = {} + for line in lines: + if start is None and (match := START.search(line)): + start = _time(match[1]) + if match := LINE.search(line): + stamp, worker, nodeid = _time(match[1]), match[2], match[3] + previous = last.get(worker, start or stamp) + found[nodeid] = (stamp - previous).total_seconds() + last[worker] = stamp + return found + + +def main(argv=None) -> int: + parser = argparse.ArgumentParser(description=__doc__.splitlines()[0]) + parser.add_argument("logs", nargs="+", help="saved logs of shard jobs") + parser.add_argument("--min-seconds", type=float, default=60) + args = parser.parse_args(argv) + seen = defaultdict(list) + for path in args.logs: + with open(path, encoding="utf-8", errors="replace") as log: + for nodeid, seconds in durations(log).items(): + seen[nodeid].append(seconds) + mean = {nodeid: statistics.mean(values) for nodeid, values in seen.items()} + slow = sorted( + ((seconds, nodeid) for nodeid, seconds in mean.items()), + key=lambda item: (-item[0], item[1]), + ) + print("[seconds]") + for seconds, nodeid in slow: + if seconds < args.min_seconds: + break + key = nodeid.replace("\\", "\\\\").replace('"', '\\"') + print(f'"{key}" = {round(seconds)}') + total = sum(mean.values()) / 60 + print(f"# {len(mean)} tests, {total:.0f} worker-minutes", file=sys.stderr) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/.github/workflows/test-suite.yaml b/.github/workflows/test-suite.yaml index 2c542b892c..d007495994 100644 --- a/.github/workflows/test-suite.yaml +++ b/.github/workflows/test-suite.yaml @@ -117,6 +117,13 @@ jobs: # shard. N is the number of jobs this matrix makes: to add a shard, add # a number to the list. # + # The slowest tests, listed with their CI durations in + # policyengine_uk/tests/shard_durations.toml, are dealt out by duration + # instead of hashed. With the hash alone, over 95 runs on 24 October + # shard 2/5 averaged 57 minutes (up to 70) and shard 1/5 49: a 22-minute + # property test and several of 4 to 7 minutes had hashed to shard 2. + # .github/test_durations.py regenerates the table from shard logs. + # # Four shards, not three, for memory: each pytest-xdist worker's memory # grows with the tests it runs, and with three shards of four workers # the 16 GB runners peaked at 15.6 GB, 283 MB short of running out diff --git a/changelog.d/ci-balance-test-shards.changed.md b/changelog.d/ci-balance-test-shards.changed.md new file mode 100644 index 0000000000..869e9cd900 --- /dev/null +++ b/changelog.d/ci-balance-test-shards.changed.md @@ -0,0 +1 @@ +Balance the CI Python test shards: the slowest tests, listed with their measured CI durations, are dealt out by duration instead of by hash, so no shard carries most of them. diff --git a/policyengine_uk/tests/code_health/test_ci_test_shards.py b/policyengine_uk/tests/code_health/test_ci_test_shards.py index 43c3477609..0193a5b67f 100644 --- a/policyengine_uk/tests/code_health/test_ci_test_shards.py +++ b/policyengine_uk/tests/code_health/test_ci_test_shards.py @@ -36,6 +36,10 @@ 11. ``changed_code.py`` calls a change code exactly when a path matches a pattern as a workflow ``paths`` filter would (``dir/**`` is every file under ``dir/``), and calls an empty change list code. +12. The slow tests in ``shard_durations.toml`` are dealt out longest first to + the least loaded shard, whatever order the table lists them in, so no + shard's listed load exceeds another's by more than the longest test; the + table parses and each entry names a test function that exists. """ import ast @@ -171,6 +175,76 @@ def test_parse_shard_rejects_anything_else(conftest, value): conftest.parse_shard(value) +# Invariant 12: the slowest tests are dealt out by duration. + +_durations = st.dictionaries(nodeids, st.floats(0, 3_000, allow_nan=False), max_size=40) + + +@PROPERTY_SETTINGS +@given(durations=_durations, shards=st.integers(1, 8), data=st.data()) +def test_balanced_shards_bound_the_gap_by_the_longest_test( + conftest, durations, shards, data +): + placed = conftest.balanced_shards(durations, shards) + assert placed.keys() == durations.keys() + assert all(1 <= shard <= shards for shard in placed.values()) + load = [0.0] * shards + for nodeid, shard in placed.items(): + load[shard - 1] += durations[nodeid] + assert max(load) - min(load) <= max(durations.values(), default=0) + 1e-6 + # The same placement whatever order the table lists the tests in. + reordered = dict(data.draw(st.permutations(list(durations.items())))) + assert conftest.balanced_shards(reordered, shards) == placed + + +@PROPERTY_SETTINGS +@given(ids=st.lists(nodeids, max_size=40, unique=True), shards=st.integers(1, 8)) +def test_shards_partition_a_collection_with_listed_tests(conftest, ids, shards): + listed = list(conftest.read_shard_durations())[:20] + collection = sorted(set(ids) | set(listed)) + members = { + shard: [ + nodeid + for nodeid in collection + if conftest.shard_of(nodeid, shards) == shard + ] + for shard in range(1, shards + 1) + } + assert sorted(sum(members.values(), [])) == collection + + +def test_listed_tests_follow_the_table(conftest): + durations = conftest.read_shard_durations() + for shards in (1, 3, 5, 6): + placed = conftest.balanced_shards(durations, shards) + assert all(conftest.shard_of(n, shards) == k for n, k in placed.items()) + + +def test_the_checked_in_shard_durations_name_tests_that_exist(conftest): + durations = conftest.read_shard_durations() + assert durations + assert all(seconds > 0 for seconds in durations.values()) + for nodeid in durations: + path, _, rest = nodeid.partition("::") + file = REPO_ROOT / path + assert file.exists(), nodeid + names = rest.split("::") + scope = ast.parse(file.read_text(encoding="utf-8")).body + for name in names[:-1]: + [cls] = [n for n in scope if isinstance(n, ast.ClassDef) and n.name == name] + scope = cls.body + functions = { + n.name + for n in scope + if isinstance(n, (ast.FunctionDef, ast.AsyncFunctionDef)) + } + assert names[-1].split("[")[0] in functions, nodeid + + +def test_a_missing_table_leaves_every_test_to_the_hash(conftest, tmp_path): + assert conftest.read_shard_durations(tmp_path / "absent.toml") == {} + + # Invariant 4: the collection listing. diff --git a/policyengine_uk/tests/conftest.py b/policyengine_uk/tests/conftest.py index 6a5d917af4..2e65fc4325 100644 --- a/policyengine_uk/tests/conftest.py +++ b/policyengine_uk/tests/conftest.py @@ -6,6 +6,7 @@ import os import re import sys +import tomllib import weakref from dataclasses import dataclass from importlib.machinery import SourceFileLoader @@ -189,15 +190,66 @@ def cloned_uk_tax_benefit_system(): # CI splits the suite over several runners with ``--shard K/N``. The shard of a -# test is a function of its node id alone, so the shards partition whatever is -# collected: every test runs in exactly one of them, including a test added -# later. The Test job checks that on each run (.github/check_test_shards.py). +# test is a function of its node id alone (and of the checked-in table below), +# so the shards partition whatever is collected: every test runs in exactly +# one of them, including a test added later. The Test job checks that on each +# run (.github/check_test_shards.py). +# +# Most tests are placed by a hash of their node id. A hash spreads thousands +# of short tests evenly, but not a few long ones: on 24 October 2026 one +# property test took 22 minutes, and by chance it and several others of 4 to +# 7 minutes hashed to shard 2 of 5, which then took 57 minutes on average +# against 49 for shard 1 (95 runs). The tests in shard_durations.toml, the +# slowest on CI, are instead dealt out by duration, longest first, each to the +# shard with the least so far. A test missing from the table, or the table +# missing, falls back to the hash. +SHARD_DURATIONS = ( + Path(importlib.util.find_spec("policyengine_uk").origin).parent + / "tests" + / "shard_durations.toml" +) + + +def read_shard_durations(path: Path = SHARD_DURATIONS) -> dict[str, float]: + """Seconds each listed test took on CI, by node id; empty without a table.""" + try: + text = path.read_text(encoding="utf-8") + except FileNotFoundError: + return {} + return { + nodeid: float(seconds) + for nodeid, seconds in tomllib.loads(text).get("seconds", {}).items() + } + + +def balanced_shards(durations: Mapping[str, float], shards: int) -> dict[str, int]: + """Deal tests to shards, longest first, each to the least loaded shard. + + Ties go to the lower node id and the lower shard, so every process gives + the same answer. + """ + load = [0.0] * shards + placed = {} + for nodeid, seconds in sorted(durations.items(), key=lambda kv: (-kv[1], kv[0])): + shard = min(range(shards), key=lambda k: (load[k], k)) + load[shard] += seconds + placed[nodeid] = shard + 1 + return placed + + +_BALANCED: dict[int, dict[str, int]] = {} + + def shard_of(nodeid: str, shards: int) -> int: """The shard, from 1 to ``shards``, that runs the test ``nodeid``. Uses SHA-256 rather than ``hash``, which Python salts per process: every runner and every pytest-xdist worker must give the same answer. """ + if shards not in _BALANCED: + _BALANCED[shards] = balanced_shards(read_shard_durations(), shards) + if nodeid in _BALANCED[shards]: + return _BALANCED[shards][nodeid] digest = hashlib.sha256(nodeid.encode("utf-8")).digest() return int.from_bytes(digest[:8], "big") % shards + 1 diff --git a/policyengine_uk/tests/shard_durations.toml b/policyengine_uk/tests/shard_durations.toml new file mode 100644 index 0000000000..82feec315f --- /dev/null +++ b/policyengine_uk/tests/shard_durations.toml @@ -0,0 +1,305 @@ +# The slowest Python tests on CI, in seconds, for --shard (conftest.py deals +# these out by duration; every other test is placed by a hash of its node id). +# +# Measured with .github/test_durations.py --min-seconds 60 from the logs of +# all five Python shards of eight merge queue runs on 24 October 2026, each +# test's mean over the runs (40050881130, 40059344467, 40063244949, +# 40067189795, 40071060766, 40079467297, 40083761750, 40087883891). A test +# here that no longer exists is harmless; a slow test not here is placed by +# the hash. Regenerate when a shard drifts well above the others. +[seconds] +"policyengine_uk/tests/test_capital_share_components.py::test_capital_matches_the_original_lists" = 1307 +"policyengine_uk/tests/test_statutory_pension_edges.py::test_nics_cap_preserves_aa_inputs_and_charge_with_fixed_ordinary_tax[2029]" = 783 +"policyengine_uk/tests/test_statutory_pension_edges.py::test_nics_cap_preserves_aa_inputs_and_charge_with_fixed_ordinary_tax[2030]" = 769 +"policyengine_uk/tests/test_mixed_age_couple_properties.py::test_mixed_age_couple_invariants" = 476 +"policyengine_uk/tests/test_tax_credits_pension_credit_passport_properties.py::test_passport_matches_an_independent_passported_simulation" = 421 +"policyengine_uk/tests/test_dated_reform_routes.py::test_routes_agree_on_start_stop_keys" = 388 +"policyengine_uk/tests/test_reform_representations.py::test_parametric_reform_representations_agree" = 368 +"policyengine_uk/tests/test_tax_credits_pension_credit_passport_properties.py::test_results_do_not_depend_on_request_order" = 350 +"policyengine_uk/tests/aggregate_impact/test_aggregate_impact_certified.py::test_accounting_identities_and_closure_hold" = 340 +"policyengine_uk/tests/aggregate_impact/test_aggregate_impact_certified.py::test_declared_double_counts_are_still_double_counted_by_the_model" = 338 +"policyengine_uk/tests/aggregate_impact/test_aggregate_impact_certified.py::test_household_detail_is_complete" = 338 +"policyengine_uk/tests/test_pension_credit_earnings_disregard_properties.py::test_statute_bounds_differential_and_monotonicity" = 335 +"policyengine_uk/tests/test_tax_credits_pension_credit_passport_properties.py::test_without_awards_pension_credit_alone_decides_the_passport" = 333 +"policyengine_uk/tests/aggregate_impact/test_aggregate_impact_certified.py::test_every_tax_component_is_counted_exactly_once" = 332 +"policyengine_uk/tests/test_childcare_entitlement_floor_properties.py::test_more_hours_used_never_lowers_childcare_support" = 328 +"policyengine_uk/tests/test_brma_region_default.py::test_brma_with_sparse_regions_follows_the_rule_and_keeps_regions" = 302 +"policyengine_uk/tests/test_housing_benefit_universal_credit_passport_properties.py::test_universal_credit_limb_dates" = 299 +"policyengine_uk/tests/test_pension_credit_child_amount_tax_credit_properties.py::test_results_do_not_depend_on_request_order" = 292 +"policyengine_uk/tests/test_from_reform_modifier.py::test_sequence_modifier_matches_apply_with_repeated_and_reordered_writes[True]" = 287 +"policyengine_uk/tests/test_pension_credit_earnings_disregard_properties.py::test_pension_credit_income_is_flat_in_earnings_under_the_disregard" = 265 +"policyengine_uk/tests/test_uc_single_claim_properties.py::test_a_flag_marking_no_single_claim_leaves_cap_and_lha_rules_alone" = 249 +"policyengine_uk/tests/test_council_tax_reduction_young_person_properties.py::test_schemes_differ_only_where_the_two_definitions_differ" = 240 +"policyengine_uk/tests/test_savings_credit_eligibility.py::test_savings_credit_generated_invariants" = 239 +"policyengine_uk/tests/test_uc_minimum_income_floor_properties.py::test_notional_deductions_equal_tax_on_threshold_as_only_income" = 235 +"policyengine_uk/tests/test_pension_credit_earnings_disregard_properties.py::test_earning_more_never_raises_pension_credit" = 233 +"policyengine_uk/tests/test_childcare_entitlement_floor_properties.py::test_raising_the_income_limit_never_lowers_support_or_income" = 225 +"policyengine_uk/tests/test_fiscal_partition.py::test_each_total_is_the_sum_of_its_heads" = 222 +"policyengine_uk/tests/test_council_tax_reduction_claimant_family_scheme_properties.py::test_other_families_do_not_change_a_claim" = 209 +"policyengine_uk/tests/test_uc_single_claim_properties.py::test_capital_includes_the_other_members" = 209 +"policyengine_uk/tests/test_benefit_cap_and_ctr_pension_age_properties.py::test_benefit_cap_and_ctr_pension_age_invariants" = 207 +"policyengine_uk/tests/test_uc_health_warnings.py::test_warning_iff_a_reformed_window_reaches_an_active_rebalancing_year" = 207 +"policyengine_uk/tests/test_pension_credit_child_amount_tax_credit_properties.py::test_award_removes_the_child_amount_and_nothing_else" = 199 +"policyengine_uk/tests/test_miscellaneous_loss_properties.py::test_a_miscellaneous_loss_changes_nothing_else" = 197 +"policyengine_uk/tests/test_date_of_birth.py::test_a_date_of_birth_input_matches_the_same_birthday_by_age" = 197 +"policyengine_uk/tests/test_sdlt_counted_once_properties.py::test_sdlt_is_counted_once_and_abolition_removes_it" = 191 +"policyengine_uk/tests/test_ni_class_1_age_properties.py::test_primary_class_1_stops_at_state_pension_age" = 191 +"policyengine_uk/tests/test_dated_reform_routes.py::test_calendar_year_changes_match_the_annualised_route" = 190 +"policyengine_uk/tests/test_current_education_order.py::test_enrolment_is_order_independent_and_matches_the_reference" = 188 +"policyengine_uk/tests/test_council_tax_reduction_young_person_properties.py::test_scheme_selection_over_every_combination" = 187 +"policyengine_uk/tests/test_lbtt_ltt_lease_rent_properties.py::test_rent_charged_over_two_years_telescopes" = 187 +"policyengine_uk/tests/test_ni_threshold_freeze.py::test_liabilities_follow_the_frozen_statute" = 186 +"policyengine_uk/tests/test_dated_reform_routes.py::test_reforms_leave_baselines_caches_and_later_simulations_alone" = 184 +"policyengine_uk/tests/test_ni_class_4_properties.py::test_class_4_matches_statute_and_exact_regulation_100" = 182 +"policyengine_uk/tests/test_council_tax_reduction_pension_credit_properties.py::test_guarantee_credit_recipients_ctr_is_invariant_to_savings" = 182 +"policyengine_uk/tests/test_dataframe_dataset.py::test_frames_the_previous_loader_read_give_the_same_inputs" = 182 +"policyengine_uk/tests/test_ni_class_4_properties.py::test_class_4_is_non_decreasing_in_profits" = 177 +"policyengine_uk/tests/test_ni_class_1_age_properties.py::test_secondary_class_1_continues_past_state_pension_age" = 174 +"policyengine_uk/tests/test_pension_credit_carer_income_properties.py::test_scottish_carer_supplement_is_not_means_tested_income" = 170 +"policyengine_uk/tests/test_council_tax_reduction_claimant_family_scheme_properties.py::test_scheme_follows_own_family" = 167 +"policyengine_uk/tests/test_uc_claimant_income_properties.py::test_dependants_earnings_do_not_lift_the_benefit_cap" = 166 +"policyengine_uk/tests/test_uc_state_pension_properties.py::test_property_income_is_excluded_while_state_pension_counts" = 165 +"policyengine_uk/tests/test_benefit_cap_specified_benefits_properties.py::test_non_dependent_adults_never_change_the_exemption" = 164 +"policyengine_uk/tests/test_pension_credit_reported_capital_properties.py::test_entitlement_never_rises_with_reported_capital" = 163 +"policyengine_uk/tests/test_council_tax_reduction_claimant_family_scheme_properties.py::test_exemption_is_the_applicants_own" = 162 +"policyengine_uk/tests/test_benefit_cap_specified_benefits_properties.py::test_exemption_matches_regulations" = 159 +"policyengine_uk/tests/test_pension_annual_allowance_properties.py::test_contributions_above_the_allowance_are_not_taxed_twice" = 157 +"policyengine_uk/tests/test_process_time_reforms.py::test_the_state_pension_is_non_decreasing_in_the_minimum_rate" = 157 +"policyengine_uk/tests/test_dated_reform_routes.py::test_indexed_threshold_schedules_match_prior_law" = 156 +"policyengine_uk/tests/test_uc_single_claim_properties.py::test_benefit_cap_rate_and_exceptions" = 156 +"policyengine_uk/tests/test_uc_claimant_elements_properties.py::test_member_order_does_not_change_the_elements" = 156 +"policyengine_uk/tests/test_dataframe_dataset.py::test_an_exported_frame_loads_back_and_exports_itself" = 156 +"policyengine_uk/tests/test_household_head_agreement_properties.py::test_flags_matter_only_through_the_head" = 156 +"policyengine_uk/tests/test_dated_reform_routes.py::test_restating_a_parameters_own_value_changes_nothing" = 155 +"policyengine_uk/tests/test_maintenance_loan_proxies.py::test_proxy_outputs_do_not_depend_on_what_was_calculated_first" = 154 +"policyengine_uk/tests/test_council_tax_reduction_pension_credit_properties.py::test_not_claiming_pension_credit_never_raises_a_recipients_ctr" = 153 +"policyengine_uk/tests/test_pension_credit_reported_capital_properties.py::test_locality" = 153 +"policyengine_uk/tests/test_dated_reform_routes.py::test_no_change_reaches_a_year_before_it_starts" = 152 +"policyengine_uk/tests/test_benefit_cap_specified_benefits_properties.py::test_exempt_families_have_no_cap_and_others_the_statutory_cap" = 152 +"policyengine_uk/tests/test_council_tax_reduction_claimant_properties.py::test_claimant_does_not_follow_age" = 152 +"policyengine_uk/tests/test_uc_legacy_closure_properties.py::test_a_closure_claim_pays_the_universal_credit_of_any_claim" = 150 +"policyengine_uk/tests/test_ltt_lbtt_expected_properties.py::test_ltt_and_lbtt_enter_the_totals_once_at_full_value" = 149 +"policyengine_uk/tests/test_uc_claimant_elements_properties.py::test_a_claimants_limited_capability_never_lowers_the_elements" = 149 +"policyengine_uk/tests/test_brma_region_default.py::test_brma_follows_the_rule_in_any_order" = 144 +"policyengine_uk/tests/test_uc_work_related_groups_properties.py::test_scope_holds_whichever_member_is_nominated" = 141 +"policyengine_uk/tests/test_state_pension_components.py::test_full_rate_reforms_never_move_the_add_on" = 140 +"policyengine_uk/tests/test_severe_disability_afcs_properties.py::test_afcs_payments_never_change_severe_disability" = 137 +"policyengine_uk/tests/test_benefit_cap_and_ctr_pension_age_properties.py::test_a_pension_age_partner_never_exempts_a_uc_award" = 136 +"policyengine_uk/tests/test_uc_claimant_income_properties.py::test_dependants_income_never_changes_universal_credit" = 135 +"policyengine_uk/tests/test_uc_claimant_income_properties.py::test_member_order_does_not_matter" = 134 +"policyengine_uk/tests/test_uc_legacy_closure_properties.py::test_the_closure_flag_only_decides_closure_claims" = 134 +"policyengine_uk/tests/test_uc_claimant_elements_properties.py::test_both_claimants_limited_capability_gives_one_lcwra_element" = 131 +"policyengine_uk/tests/test_childcare_entitlement_floor_properties.py::test_becoming_eligible_never_lowers_childcare_support" = 130 +"policyengine_uk/tests/test_means_test_income_properties.py::test_income_of_non_claimants_never_counts" = 128 +"policyengine_uk/tests/test_savings_credit_only_receipt_properties.py::test_pension_credit_freeze_keeps_the_baseline_receipt" = 126 +"policyengine_uk/tests/test_council_tax_reduction_carer_income_properties.py::test_council_tax_reduction_income_ignores_the_scottish_carer_supplement" = 124 +"policyengine_uk/tests/test_labour_supply_dynamics_properties.py::test_dynamics_respond_only_for_included_people" = 123 +"policyengine_uk/tests/test_uc_claimant_elements_properties.py::test_dependants_disability_or_caring_never_gives_claimants_an_element" = 123 +"policyengine_uk/tests/test_council_tax_reduction_pension_credit_properties.py::test_guarantee_credit_recipients_ctr_is_invariant_to_state_pension" = 122 +"policyengine_uk/tests/test_claims_all_entitled_benefits.py::test_ctr_is_zero_for_every_nonreporter_without_an_explicit_claim_flag" = 121 +"policyengine_uk/tests/test_targeted_childcare_guarantee_credit_properties.py::test_fix_only_removes_the_unpaid_guarantee_credit_route" = 120 +"policyengine_uk/tests/test_date_of_birth.py::test_cutoffs_follow_the_date_of_birth" = 120 +"policyengine_uk/tests/test_means_test_income_properties.py::test_income_of_children_and_young_persons_never_counts" = 119 +"policyengine_uk/tests/test_savings_credit_only_receipt_properties.py::test_stopping_pension_credit_payments_ends_receipt" = 119 +"policyengine_uk/tests/test_uc_earnings_deductions_properties.py::test_uc_is_non_increasing_in_unearned_income" = 119 +"policyengine_uk/tests/test_benunit_reported_capital_properties.py::test_uc_never_rises_with_recorded_capital" = 119 +"policyengine_uk/tests/test_uc_standard_allowance_uplift.py::test_growth_is_cpi_times_the_change_in_uplift" = 118 +"policyengine_uk/tests/test_uc_unearned_benefits_properties.py::test_uc_falls_pound_for_pound_in_each_benefit" = 118 +"policyengine_uk/tests/test_uc_work_related_groups_properties.py::test_scope_rules_never_raise_earned_income" = 118 +"policyengine_uk/tests/test_uc_unearned_benefits_properties.py::test_uc_is_non_increasing_in_each_benefit" = 117 +"policyengine_uk/tests/test_uc_earnings_deductions_properties.py::test_fix_only_removes_deductions" = 116 +"policyengine_uk/tests/test_uc_company_owner_properties.py::test_capital_and_earnings_identities" = 116 +"policyengine_uk/tests/test_dataframe_dataset.py::test_a_reloaded_simulation_reads_the_same_identifiers_in_each_year_given_inputs" = 115 +"policyengine_uk/tests/test_dated_reform_routes.py::test_preserve_calendar_dates_changes_keep_their_dates" = 114 +"policyengine_uk/tests/test_council_tax_reduction_applicant_properties.py::test_head_applying_alone_matches_her_own_benefit_unit" = 114 +"policyengine_uk/tests/test_uc_income_from_capital_properties.py::test_interest_dividends_and_rent_leave_the_award_unchanged" = 114 +"policyengine_uk/tests/test_council_tax_reduction_young_person_properties.py::test_lone_parent_and_working_age_personal_allowance" = 114 +"policyengine_uk/tests/test_benunit_reported_capital_properties.py::test_financial_capital_matches_complete_override_without_nonfinancial_assets" = 112 +"policyengine_uk/tests/test_salary_sacrifice_ni_measure_properties.py::test_measures_equal_the_difference_of_complete_liabilities[rates change within the year]" = 111 +"policyengine_uk/tests/test_council_tax_reduction_applicant_properties.py::test_council_tax_reduction_assesses_the_liable_head" = 110 +"policyengine_uk/tests/test_income_support_gate_reads_claimant_or_partner_awards.py::test_the_switched_gate_matches_the_replaced_code" = 110 +"policyengine_uk/tests/test_income_support_gate_reads_claimant_or_partner_awards.py::test_the_limbs_read_every_stored_value_as_intended" = 109 +"policyengine_uk/tests/test_targeted_childcare_guarantee_credit_properties.py::test_not_claiming_pension_credit_never_makes_a_family_eligible" = 109 +"policyengine_uk/tests/test_income_support_eligibility_properties.py::test_excluded_member_never_changes_is_eligibility" = 109 +"policyengine_uk/tests/test_wealth_tax_net_base_properties.py::test_wealth_tax_is_the_schedule_on_net_wealth" = 109 +"policyengine_uk/tests/test_uc_earnings_deductions_properties.py::test_deductions_equal_tax_and_ni_on_earnings_alone" = 109 +"policyengine_uk/tests/test_salary_sacrifice_ni_measure_properties.py::test_measures_equal_the_difference_of_complete_liabilities[full-year Category A directors]" = 109 +"policyengine_uk/tests/test_uc_unearned_benefits_properties.py::test_carer_support_payment_counts_like_capped_private_pension" = 109 +"policyengine_uk/tests/test_dataframe_dataset.py::test_a_frame_over_several_years_exports_the_same_frame_again" = 108 +"policyengine_uk/tests/test_capital_share_components.py::test_share_like_capital_keeps_the_supplied_aggregate" = 107 +"policyengine_uk/tests/test_dated_reform_routes.py::test_reformed_annual_values_match_the_oracle" = 107 +"policyengine_uk/tests/test_uc_income_from_capital_properties.py::test_uc_is_non_increasing_in_capital" = 107 +"policyengine_uk/tests/test_disable_simulated_benefits_benefit_cap.py::test_the_benefit_cap_matches_the_replaced_readers_with_the_reform_off" = 107 +"policyengine_uk/tests/test_uc_earnings_deductions_properties.py::test_unearned_income_never_changes_earned_income" = 107 +"policyengine_uk/tests/test_uc_single_claim_properties.py::test_maximum_amount_is_the_solo_claimants" = 107 +"policyengine_uk/tests/test_benefit_cap_lha_scheme_split_properties.py::test_awards_are_the_old_awards_where_the_caps_agree" = 106 +"policyengine_uk/tests/test_uc_income_from_capital_properties.py::test_interest_dividends_and_rent_do_not_enter_the_means_test" = 105 +"policyengine_uk/tests/test_uc_company_owner_properties.py::test_rule_is_inert_when_it_does_not_apply" = 105 +"policyengine_uk/tests/test_housing_benefit_universal_credit_passport_properties.py::test_calculation_order_does_not_change_results" = 105 +"policyengine_uk/tests/test_severe_disability_addition_properties.py::test_addition_matches_the_reference_and_is_bounded" = 105 +"policyengine_uk/tests/test_income_support_eligibility_properties.py::test_is_eligibility_matches_a_family_by_family_reading" = 105 +"policyengine_uk/tests/test_benefit_cap_lha_scheme_split_properties.py::test_exceptions_are_the_old_exception_where_the_schemes_agree" = 105 +"policyengine_uk/tests/test_dfe_childcare_student_support_properties.py::test_extended_childcare_eligibility_matches_regs_13_to_15" = 104 +"policyengine_uk/tests/test_pension_credit_child_amount_tax_credit_properties.py::test_no_award_after_tax_credits_ended" = 104 +"policyengine_uk/tests/test_benefit_cap_lha_scheme_split_properties.py::test_maximum_rent_reads_the_housing_benefit_category" = 104 +"policyengine_uk/tests/test_benefit_cap_lha_scheme_split_properties.py::test_cap_rate_is_the_old_rate_where_the_schemes_agree" = 103 +"policyengine_uk/tests/test_severe_disability_addition_properties.py::test_residence_condition_is_metamorphic" = 102 +"policyengine_uk/tests/test_uc_unearned_benefits_properties.py::test_each_benefit_counts_like_private_pension" = 102 +"policyengine_uk/tests/test_income_support_gate_reads_claimant_or_partner_awards.py::test_an_entered_claimant_or_partner_award_alone_decides_its_limb" = 102 +"policyengine_uk/tests/test_dfe_childcare_student_support_properties.py::test_maintenance_loan_household_income_applies_the_age_25_test" = 101 +"policyengine_uk/tests/test_severe_disability_addition_properties.py::test_shared_carer_attribution_matches_the_reference_matching" = 101 +"policyengine_uk/tests/test_benefit_cap_lha_scheme_split_properties.py::test_lha_category_is_the_claimed_schemes_old_category" = 100 +"policyengine_uk/tests/test_uc_single_claim_properties.py::test_deduction_is_the_joint_claimants" = 100 +"policyengine_uk/tests/test_severe_disability_addition_properties.py::test_legacy_premium_equals_the_addition_without_young_people" = 100 +"policyengine_uk/tests/test_pension_annual_allowance_properties.py::test_extra_contributions_never_raise_tax_by_more_than_the_charge" = 100 +"policyengine_uk/tests/test_housing_benefit_specified_accommodation_disregard_properties.py::test_disregard_is_non_decreasing_in_earnings" = 99 +"policyengine_uk/tests/test_uc_minimum_income_floor_properties.py::test_more_earnings_never_lower_earned_income_or_raise_uc" = 99 +"policyengine_uk/tests/test_savings_allowance_properties.py::test_scottish_and_english_taxpayers_get_the_same_allowance" = 97 +"policyengine_uk/tests/test_absolute_poverty_reference_year.py::test_absolute_poverty_flags_follow_the_line" = 97 +"policyengine_uk/tests/test_ni_secondary_threshold.py::test_employer_ni_follows_the_statutory_threshold" = 97 +"policyengine_uk/tests/test_uc_state_pension_properties.py::test_state_pension_counts_like_private_pension" = 97 +"policyengine_uk/tests/test_uc_work_related_groups_properties.py::test_qualifying_age_route_moves_only_claimants_past_it" = 97 +"policyengine_uk/tests/test_uc_earned_income_before_work_allowance_properties.py::test_more_pay_never_turns_the_childcare_criterion_on" = 96 +"policyengine_uk/tests/test_legacy_award_work_properties.py::test_screens_match_a_family_by_family_reading" = 96 +"policyengine_uk/tests/test_dated_reform_routes.py::test_a_schedule_of_two_changes_matches_the_oracle" = 96 +"policyengine_uk/tests/test_uc_company_owner_properties.py::test_dependant_company_does_not_change_the_award" = 96 +"policyengine_uk/tests/test_council_tax_reduction_young_person_properties.py::test_each_scheme_reads_its_own_young_person" = 96 +"policyengine_uk/tests/test_pension_contribution_deduction_rate_properties.py::test_each_scheme_moves_by_contributions_times_its_own_change_in_share" = 96 +"policyengine_uk/tests/test_rent_of_sharers_boarders_and_lodgers_properties.py::test_meals_and_council_tax" = 96 +"policyengine_uk/tests/test_claimant_not_own_child_properties.py::test_child_benefit_entitlement_counts_only_other_members" = 96 +"policyengine_uk/tests/test_simulation_dataset_sources.py::test_saved_datasets_have_exactly_one_schema_and_load" = 96 +"policyengine_uk/tests/test_dfe_childcare_student_support_properties.py::test_tax_free_childcare_work_condition_matches_reg_13" = 95 +"policyengine_uk/tests/test_uc_state_pension_properties.py::test_uc_falls_pound_for_pound_in_state_pension" = 95 +"policyengine_uk/tests/test_uc_state_pension_properties.py::test_uc_is_non_increasing_in_state_pension" = 95 +"policyengine_uk/tests/test_claimant_not_own_child_properties.py::test_claimants_own_circumstances_never_change_child_amounts" = 95 +"policyengine_uk/tests/test_uc_work_related_groups_properties.py::test_more_earnings_never_lower_earned_income_or_raise_uc" = 95 +"policyengine_uk/tests/test_lbtt_ltt_lease_rent_properties.py::test_lease_rent_matches_bands_and_exemptions" = 94 +"policyengine_uk/tests/test_benefit_cap_lha_scheme_split_properties.py::test_each_scheme_reduces_by_its_own_excess" = 94 +"policyengine_uk/tests/test_dated_reform_routes.py::test_boolean_changes_match_the_oracle" = 93 +"policyengine_uk/tests/test_housing_benefit_specified_accommodation_disregard_properties.py::test_no_para_18_amount_without_the_input" = 93 +"policyengine_uk/tests/test_uc_childcare_work_condition_properties.py::test_dependants_do_not_affect_the_condition" = 93 +"policyengine_uk/tests/test_date_of_birth.py::test_children_are_ordered_by_date_of_birth" = 92 +"policyengine_uk/tests/test_labour_supply_response_baseline.py::test_response_scales_with_the_elasticities" = 92 +"policyengine_uk/tests/test_uc_unearned_benefits_properties.py::test_uc_falls_pound_for_pound_in_counted_carer_support_payment" = 91 +"policyengine_uk/tests/test_dated_reform_routes.py::test_current_laws_own_first_value_from_a_growth_series_first_year_changes_nothing[gov.economic_assumptions.yoy_growth.obr.per_capita.gdp]" = 91 +"policyengine_uk/tests/test_uc_childcare_work_condition_properties.py::test_adding_an_exception_or_work_never_removes_the_condition" = 91 +"policyengine_uk/tests/test_uc_unearned_benefits_properties.py::test_uc_is_non_increasing_in_carer_support_payment" = 91 +"policyengine_uk/tests/test_legacy_award_work_properties.py::test_more_work_never_makes_a_family_eligible" = 90 +"policyengine_uk/tests/test_council_tax_reduction_claimant_properties.py::test_no_op_where_head_is_eldest" = 90 +"policyengine_uk/tests/test_uc_work_related_groups_properties.py::test_partner_who_cannot_be_a_joint_claimant" = 90 +"policyengine_uk/tests/test_claims_all_entitled_benefits.py::test_data_built_takeup_equals_reported_only" = 90 +"policyengine_uk/tests/test_marriage_allowance_cps_switch.py::test_the_allowance_never_falls_as_the_statutory_rate_rises" = 90 +"policyengine_uk/tests/test_uprating_inputs_reach_data.py::test_a_growth_reform_moves_the_data_in_its_year_only" = 90 +"policyengine_uk/tests/test_housing_benefit_pension_age_properties.py::test_would_claim_uc_does_not_affect_pension_age_housing_benefit" = 90 +"policyengine_uk/tests/test_pension_credit_child_amount_tax_credit_properties.py::test_no_child_amount_before_schedule_iia" = 90 +"policyengine_uk/tests/test_housing_benefit_pension_age_properties.py::test_pension_age_housing_benefit_is_non_increasing_in_income" = 89 +"policyengine_uk/tests/test_legacy_award_work_properties.py::test_member_outside_the_family_never_changes_the_couples_screen" = 89 +"policyengine_uk/tests/test_pension_annual_allowance_properties.py::test_unused_allowance_reduces_chargeable_amount_one_for_one" = 89 +"policyengine_uk/tests/test_uc_claimant_elements_properties.py::test_carers_of_the_same_person_have_at_most_one_carer_element" = 89 +"policyengine_uk/tests/test_housing_benefit_specified_accommodation_disregard_properties.py::test_the_input_never_lowers_the_disregard" = 89 +"policyengine_uk/tests/test_child_and_adult_definitions_properties.py::test_valid_family_partition_and_adding_a_child_preserves_claimants" = 89 +"policyengine_uk/tests/test_uc_property_capital.py::test_capital_is_independent_of_person_and_benefit_unit_row_order" = 88 +"policyengine_uk/tests/test_child_and_adult_definitions_properties.py::test_programme_definitions_with_generated_entry_and_household_context" = 88 +"policyengine_uk/tests/test_process_time_reforms.py::test_each_growth_rate_moves_its_index_in_the_year_it_is_shown" = 88 +"policyengine_uk/tests/test_severe_disability_addition_properties.py::test_a_carer_benefit_never_increases_the_addition" = 88 +"policyengine_uk/tests/test_savings_allowance_properties.py::test_a_higher_pay_never_raises_the_allowance" = 87 +"policyengine_uk/tests/test_child_and_adult_definitions_properties.py::test_all_deprecated_shims_and_explicit_age_ranks_keep_frozen_semantics" = 87 +"policyengine_uk/tests/test_council_tax_reduction_claimant_properties.py::test_claimant_invariants" = 87 +"policyengine_uk/tests/test_housing_benefit_guarantee_credit_passport_properties.py::test_not_claiming_guarantee_credit_never_raises_housing_benefit" = 87 +"policyengine_uk/tests/test_legacy_award_work_properties.py::test_caring_never_ends_esa_and_never_matters_for_jsa" = 87 +"policyengine_uk/tests/test_trading_loss_properties.py::test_means_tests_see_the_loss_only_through_tax" = 86 +"policyengine_uk/tests/test_child_and_adult_definitions_properties.py::test_flagging_the_claimant_as_a_parent_never_adds_a_partner" = 86 +"policyengine_uk/tests/test_pension_credit_statutory_pay_properties.py::test_moving_pay_between_wages_and_statutory_pay" = 86 +"policyengine_uk/tests/test_claimant_not_own_child_properties.py::test_claimants_are_never_their_units_children_and_others_keep_status" = 86 +"policyengine_uk/tests/test_household_benefits_properties.py::test_benefit_uprating_applies_to_each_benefit_once" = 86 +"policyengine_uk/tests/test_child_and_adult_definitions_properties.py::test_frs_shaped_units_keep_the_under_20_presumption" = 85 +"policyengine_uk/tests/test_severe_disability_addition_properties.py::test_swapping_partners_leaves_a_couples_addition_unchanged" = 84 +"policyengine_uk/tests/test_child_and_adult_definitions_properties.py::test_any_benefit_unit_has_at_most_two_claimants_or_partners" = 84 +"policyengine_uk/tests/test_child_and_adult_definitions_properties.py::test_adding_a_child_without_identifying_parents_preserves_existing_members" = 84 +"policyengine_uk/tests/test_child_and_adult_definitions_properties.py::test_member_far_below_a_flagged_claimant_is_never_their_partner" = 84 +"policyengine_uk/tests/test_process_time_reforms.py::test_a_triple_lock_rate_set_by_reform_uprates_the_state_pension[via_scenario_before_data_load-statutory-outturn]" = 83 +"policyengine_uk/tests/test_dfe_childcare_student_support_properties.py::test_care_to_learn_pays_each_child_once_up_to_the_per_child_cap" = 83 +"policyengine_uk/tests/test_process_time_reforms.py::test_a_triple_lock_rate_set_by_reform_uprates_the_state_pension[via_reform_dict-generated-interval]" = 83 +"policyengine_uk/tests/test_carers_allowance_pension_contribution_deduction_rate_properties.py::test_earnings_fall_by_contributions_times_the_change_in_share" = 83 +"policyengine_uk/tests/test_household_benefits_properties.py::test_contributory_jsa_raises_household_benefits_one_for_one" = 82 +"policyengine_uk/tests/test_uc_property_capital.py::test_assessable_capital_never_falls_when_a_countable_asset_increases" = 82 +"policyengine_uk/tests/test_process_time_reforms.py::test_a_triple_lock_rate_set_by_reform_uprates_the_state_pension[via_scenario_before_data_load-generated-bare-year]" = 82 +"policyengine_uk/tests/test_household_head_agreement_properties.py::test_every_programme_reads_one_head" = 82 +"policyengine_uk/tests/test_pension_credit_war_pension_properties.py::test_housing_benefit_and_ctr_disregard_war_pensions_on_every_route" = 81 +"policyengine_uk/tests/test_state_pension_age.py::test_status_matches_statute_for_every_birth_date[2017]" = 81 +"policyengine_uk/tests/test_legacy_award_readers_properties.py::test_other_members_awards_never_change_the_readers" = 80 +"policyengine_uk/tests/test_process_time_reforms.py::test_earnings_growth_sets_the_next_aprils_triple_lock_by_its_rule" = 80 +"policyengine_uk/tests/test_uc_company_override_properties.py::test_invalid_holdings_share_a_finite_budget_and_preserve_savings" = 80 +"policyengine_uk/tests/test_state_pension_credit_qualifying_age.py::test_qualifying_age_matches_statute_for_every_birth_date[2044]" = 80 +"policyengine_uk/tests/test_housing_benefit_pension_age_cohorts.py::test_other_members_do_not_change_the_cohort" = 80 +"policyengine_uk/tests/test_state_pension_credit_qualifying_age.py::test_qualifying_age_matches_statute_for_every_birth_date[2016]" = 80 +"policyengine_uk/tests/test_property_transaction_tax_purchase_properties.py::test_additional_purchase_is_charged_on_its_own_price" = 80 +"policyengine_uk/tests/test_state_pension_age.py::test_status_matches_statute_for_every_birth_date[2019]" = 80 +"policyengine_uk/tests/test_state_pension_age.py::test_status_matches_statute_for_every_birth_date[2015]" = 80 +"policyengine_uk/tests/test_state_pension_credit_qualifying_age.py::test_qualifying_age_matches_statute_for_every_birth_date[2017]" = 80 +"policyengine_uk/tests/test_state_pension_credit_qualifying_age.py::test_class_4_liability_matches_statute_for_every_birth_date[2018]" = 79 +"policyengine_uk/tests/test_property_transaction_tax_purchase_properties.py::test_stamp_duty_never_falls_as_the_additional_price_rises" = 79 +"policyengine_uk/tests/test_process_time_reforms.py::test_a_triple_lock_rate_set_by_reform_uprates_the_state_pension[via_scenario_before_data_load-generated-interval]" = 79 +"policyengine_uk/tests/test_housing_benefit_guarantee_credit_passport_properties.py::test_matches_the_old_formula_when_pension_credit_is_claimed" = 79 +"policyengine_uk/tests/test_process_time_reforms.py::test_a_triple_lock_rate_set_by_reform_uprates_the_state_pension[via_reform_dict-generated-bare-year]" = 79 +"policyengine_uk/tests/test_dataframe_dataset.py::test_a_frame_builds_its_people_groups_and_values" = 79 +"policyengine_uk/tests/test_pension_credit_war_pension_properties.py::test_reassigning_payments_between_sources_and_partners" = 77 +"policyengine_uk/tests/test_state_pension_credit_qualifying_age.py::test_qualifying_age_matches_statute_for_every_birth_date[2015]" = 77 +"policyengine_uk/tests/test_date_of_birth.py::test_household_situations_match_the_birth_year_rule" = 77 +"policyengine_uk/tests/test_council_tax_reduction_pension_credit_properties.py::test_awards_follow_the_pension_credit_routes" = 77 +"policyengine_uk/tests/test_legacy_carer_premium_properties.py::test_dependants_caring_never_changes_premium_or_is_eligibility" = 77 +"policyengine_uk/tests/test_esa_income_universal_credit_claim_properties.py::test_a_claim_is_the_couple_reporting_no_income_related_esa" = 76 +"policyengine_uk/tests/test_state_pension_age.py::test_status_matches_statute_for_every_birth_date[2044]" = 76 +"policyengine_uk/tests/test_disable_simulated_benefits.py::test_the_reform_splits_every_familys_reports_between_the_awards" = 75 +"policyengine_uk/tests/test_severe_disability_afcs_properties.py::test_armed_forces_independence_payment_confers_severe_disability" = 75 +"policyengine_uk/tests/test_state_pension_age.py::test_status_matches_statute_for_every_birth_date[2025]" = 74 +"policyengine_uk/tests/test_legacy_carer_premium_properties.py::test_claimant_or_partner_caring_never_removes_is_eligibility" = 74 +"policyengine_uk/tests/test_pension_credit_reported_capital_properties.py::test_override_default_bounds_and_deemed_income" = 74 +"policyengine_uk/tests/test_process_time_reforms.py::test_a_triple_lock_rate_set_by_reform_uprates_the_state_pension[via_parameter_changes-statutory-outturn]" = 74 +"policyengine_uk/tests/test_process_time_reforms.py::test_a_triple_lock_rate_set_by_reform_uprates_the_state_pension[via_parameter_changes-generated-interval]" = 74 +"policyengine_uk/tests/test_pawhp_household_income_properties.py::test_switching_pawhp_off_lowers_household_income_by_pawhp" = 73 +"policyengine_uk/tests/test_rent_of_sharers_boarders_and_lodgers_properties.py::test_no_op_without_sharers_boarders_or_lodgers" = 73 +"policyengine_uk/tests/test_uc_claimant_elements_properties.py::test_elements_match_the_published_table_of_combinations" = 72 +"policyengine_uk/tests/test_property_transaction_tax_purchase_properties.py::test_property_stocks_are_never_purchases" = 72 +"policyengine_uk/tests/test_uc_health_element_after_freeze.py::test_no_claimant_loses_from_one_year_to_the_next_with_non_negative_cpi" = 72 +"policyengine_uk/tests/test_labour_supply_response_baseline.py::test_basic_rate_rise_gives_responses_of_the_implied_sign" = 71 +"policyengine_uk/tests/test_uc_claimant_income_properties.py::test_income_matches_regulations_22_and_72" = 71 +"policyengine_uk/tests/test_process_time_reforms.py::test_a_triple_lock_rate_set_by_reform_uprates_the_state_pension[via_reform_dict-statutory-outturn]" = 70 +"policyengine_uk/tests/test_housing_benefit_lha_order_properties.py::test_bounds_closed_form_and_differential" = 70 +"policyengine_uk/tests/test_process_time_reforms.py::test_a_triple_lock_rate_set_by_reform_uprates_the_state_pension[via_parameter_changes-generated-bare-year]" = 70 +"policyengine_uk/tests/test_uc_company_owner_properties.py::test_disregarded_holdings_count_for_no_benefit_unit" = 69 +"policyengine_uk/tests/test_uc_claimant_elements_properties.py::test_an_award_has_at_most_one_element_for_each_claimant" = 69 +"policyengine_uk/tests/test_fuel_duty_schedule.py::test_annual_override_applies_at_full_strength_and_only_to_its_year" = 69 +"policyengine_uk/tests/test_council_tax_reduction_child_benefit_properties.py::test_working_age_and_northern_ireland_keep_counting_child_benefit" = 69 +"policyengine_uk/tests/test_legacy_carer_premium_properties.py::test_caring_for_the_same_person_pays_at_most_one_premium" = 69 +"policyengine_uk/tests/test_property_income_band_base_properties.py::test_moving_income_between_pay_and_property_leaves_savings_and_dividend_tax" = 69 +"policyengine_uk/tests/test_uc_statutory_pay_properties.py::test_a_dependants_statutory_pay_is_not_the_claimants_earned_income" = 68 +"policyengine_uk/tests/test_trading_loss_properties.py::test_zero_profit_trade_loss_cannot_raise_tax_or_reduce_programme_award[tax_credits-2024]" = 67 +"policyengine_uk/tests/test_legacy_award_readers_properties.py::test_claimant_or_partner_awards_match_reference" = 66 +"policyengine_uk/tests/test_rent_of_sharers_boarders_and_lodgers_properties.py::test_lha_categories" = 66 +"policyengine_uk/tests/test_council_tax_reduction_prescribed_benefits_properties.py::test_each_benefit_counts_pound_for_pound_in_every_scheme" = 66 +"policyengine_uk/tests/test_property_income_band_base_properties.py::test_more_property_income_never_lowers_savings_or_dividend_tax" = 66 +"policyengine_uk/tests/test_housing_benefit_income_related_benefit_passport_properties.py::test_passported_social_tenant_gets_the_rent_at_any_age" = 65 +"policyengine_uk/tests/test_carers_allowance_earnings_limit_properties.py::test_net_earnings_never_fall_as_pay_rises" = 65 +"policyengine_uk/tests/test_legacy_award_readers_properties.py::test_claimant_or_partner_awards_bounded_by_benefit_unit_awards" = 65 +"policyengine_uk/tests/test_carer_overlapping_benefits_properties.py::test_claiming_a_carer_benefit_reduced_to_nil_increases_pension_credit" = 65 +"policyengine_uk/tests/test_legacy_award_readers_properties.py::test_other_members_awards_never_change_the_readers_for_young_singles" = 65 +"policyengine_uk/tests/test_labour_supply_response_baseline.py::test_no_policy_change_gives_no_response" = 65 +"policyengine_uk/tests/test_legacy_award_readers_properties.py::test_other_members_awards_never_change_the_readers_for_working_parents" = 64 +"policyengine_uk/tests/test_targeted_childcare_guarantee_credit_properties.py::test_eligibility_is_the_union_of_the_routes" = 64 +"policyengine_uk/tests/test_housing_benefit_pension_age_cohorts.py::test_any_single_or_couple_follows_the_cohort_rule" = 64 +"policyengine_uk/tests/test_legacy_award_readers_properties.py::test_other_members_awards_never_change_the_readers_at_pension_age" = 64 +"policyengine_uk/tests/test_legacy_award_readers_properties.py::test_person_is_on_award_from_couple_or_own_report" = 63 +"policyengine_uk/tests/test_uc_standard_allowance_uplift.py::test_switching_rebalancing_off_removes_the_uplift_from_that_year" = 63 +"policyengine_uk/tests/test_trading_loss_properties.py::test_zero_profit_trade_loss_cannot_raise_tax_or_reduce_programme_award[housing_benefit-2024]" = 63 +"policyengine_uk/tests/test_uc_claimant_income_properties.py::test_at_most_two_assessed_claimants_drawn_from_flagged_claimants" = 61 +"policyengine_uk/tests/test_carers_allowance_earnings_limit_properties.py::test_bounds_and_differential" = 61 +"policyengine_uk/tests/test_rent_of_sharers_boarders_and_lodgers_properties.py::test_rent_is_monotone_in_household_rent" = 61 +"policyengine_uk/tests/test_targeted_childcare_guarantee_credit_properties.py::test_no_family_below_the_qualifying_age_qualifies_through_guarantee_credit" = 61 +"policyengine_uk/tests/test_uc_single_claim_properties.py::test_single_standard_allowance_at_the_claimants_own_age" = 61 +"policyengine_uk/tests/test_carer_overlapping_benefits_properties.py::test_overlap_bounds_and_reference" = 61 +"policyengine_uk/tests/test_uc_minimum_income_floor_properties.py::test_top_up_never_takes_couple_above_couple_threshold" = 61 +"policyengine_uk/tests/test_winter_heating_payment_properties.py::test_non_dependants_never_change_anyone_elses_payment" = 61 +"policyengine_uk/tests/test_labour_supply_response_baseline.py::test_periods_give_the_same_response_in_any_order" = 60 +"policyengine_uk/tests/test_salary_sacrifice_ni_measure_properties.py::test_measures_equal_the_difference_of_complete_liabilities[current law]" = 60 +"policyengine_uk/tests/test_reform_inputs_survive_reset.py::test_a_reform_names_exactly_the_variables_it_leaves_inputs_for" = 60 From c9ddd00fa0fe5b39651ca6aadd45d4ea32213943 Mon Sep 17 00:00:00 2001 From: vahid-ahmadi Date: Sat, 24 Oct 2026 15:00:23 +0100 Subject: [PATCH 2/3] List every test of 20 seconds or more in the shard table The first run with the 60-second table (run 40095846881) took 53, 46, 55, 60 and 55 minutes: shard 2/5 dropped from the slowest to the fastest, but shard 4/5 carried 235 worker-minutes against 180 to 209 for the others. The 295 listed tests were only 59% of the suite's time, and the hash left the remainder uneven. The 567 tests of 20 seconds or more are 75% of it; on the measured durations of nine runs the shards then come out at 54 minutes each, give or take half a minute. Co-Authored-By: Claude Opus 5.5 --- .github/test_durations.py | 2 +- policyengine_uk/tests/shard_durations.toml | 723 ++++++++++++++------- 2 files changed, 500 insertions(+), 225 deletions(-) diff --git a/.github/test_durations.py b/.github/test_durations.py index c2e89aedda..9f46bbbf36 100644 --- a/.github/test_durations.py +++ b/.github/test_durations.py @@ -63,7 +63,7 @@ def durations(lines) -> dict[str, float]: def main(argv=None) -> int: parser = argparse.ArgumentParser(description=__doc__.splitlines()[0]) parser.add_argument("logs", nargs="+", help="saved logs of shard jobs") - parser.add_argument("--min-seconds", type=float, default=60) + parser.add_argument("--min-seconds", type=float, default=20) args = parser.parse_args(argv) seen = defaultdict(list) for path in args.logs: diff --git a/policyengine_uk/tests/shard_durations.toml b/policyengine_uk/tests/shard_durations.toml index 82feec315f..d4ee328c75 100644 --- a/policyengine_uk/tests/shard_durations.toml +++ b/policyengine_uk/tests/shard_durations.toml @@ -1,305 +1,580 @@ # The slowest Python tests on CI, in seconds, for --shard (conftest.py deals # these out by duration; every other test is placed by a hash of its node id). +# Together they take about three quarters of the suite's time, so the hashed +# remainder is small enough to spread evenly. # -# Measured with .github/test_durations.py --min-seconds 60 from the logs of -# all five Python shards of eight merge queue runs on 24 October 2026, each -# test's mean over the runs (40050881130, 40059344467, 40063244949, -# 40067189795, 40071060766, 40079467297, 40083761750, 40087883891). A test -# here that no longer exists is harmless; a slow test not here is placed by -# the hash. Regenerate when a shard drifts well above the others. +# Measured with .github/test_durations.py --min-seconds 20 from the logs of +# all five Python shards of nine runs on 24 October 2026, each test's mean +# over the runs: merge queue runs 40050881130, 40059344467, 40063244949, +# 40067189795, 40071060766, 40079467297, 40083761750 and 40087883891, and +# pull request run 40095846881. A test here that no longer exists is +# harmless; a slow test not here is placed by the hash. Regenerate when a +# shard drifts well above the others. [seconds] -"policyengine_uk/tests/test_capital_share_components.py::test_capital_matches_the_original_lists" = 1307 -"policyengine_uk/tests/test_statutory_pension_edges.py::test_nics_cap_preserves_aa_inputs_and_charge_with_fixed_ordinary_tax[2029]" = 783 -"policyengine_uk/tests/test_statutory_pension_edges.py::test_nics_cap_preserves_aa_inputs_and_charge_with_fixed_ordinary_tax[2030]" = 769 -"policyengine_uk/tests/test_mixed_age_couple_properties.py::test_mixed_age_couple_invariants" = 476 -"policyengine_uk/tests/test_tax_credits_pension_credit_passport_properties.py::test_passport_matches_an_independent_passported_simulation" = 421 -"policyengine_uk/tests/test_dated_reform_routes.py::test_routes_agree_on_start_stop_keys" = 388 +"policyengine_uk/tests/test_capital_share_components.py::test_capital_matches_the_original_lists" = 1299 +"policyengine_uk/tests/test_statutory_pension_edges.py::test_nics_cap_preserves_aa_inputs_and_charge_with_fixed_ordinary_tax[2029]" = 761 +"policyengine_uk/tests/test_statutory_pension_edges.py::test_nics_cap_preserves_aa_inputs_and_charge_with_fixed_ordinary_tax[2030]" = 753 +"policyengine_uk/tests/test_mixed_age_couple_properties.py::test_mixed_age_couple_invariants" = 498 +"policyengine_uk/tests/test_tax_credits_pension_credit_passport_properties.py::test_passport_matches_an_independent_passported_simulation" = 412 +"policyengine_uk/tests/test_dated_reform_routes.py::test_routes_agree_on_start_stop_keys" = 392 "policyengine_uk/tests/test_reform_representations.py::test_parametric_reform_representations_agree" = 368 -"policyengine_uk/tests/test_tax_credits_pension_credit_passport_properties.py::test_results_do_not_depend_on_request_order" = 350 -"policyengine_uk/tests/aggregate_impact/test_aggregate_impact_certified.py::test_accounting_identities_and_closure_hold" = 340 -"policyengine_uk/tests/aggregate_impact/test_aggregate_impact_certified.py::test_declared_double_counts_are_still_double_counted_by_the_model" = 338 +"policyengine_uk/tests/test_tax_credits_pension_credit_passport_properties.py::test_results_do_not_depend_on_request_order" = 340 +"policyengine_uk/tests/aggregate_impact/test_aggregate_impact_certified.py::test_accounting_identities_and_closure_hold" = 338 "policyengine_uk/tests/aggregate_impact/test_aggregate_impact_certified.py::test_household_detail_is_complete" = 338 -"policyengine_uk/tests/test_pension_credit_earnings_disregard_properties.py::test_statute_bounds_differential_and_monotonicity" = 335 -"policyengine_uk/tests/test_tax_credits_pension_credit_passport_properties.py::test_without_awards_pension_credit_alone_decides_the_passport" = 333 -"policyengine_uk/tests/aggregate_impact/test_aggregate_impact_certified.py::test_every_tax_component_is_counted_exactly_once" = 332 -"policyengine_uk/tests/test_childcare_entitlement_floor_properties.py::test_more_hours_used_never_lowers_childcare_support" = 328 +"policyengine_uk/tests/aggregate_impact/test_aggregate_impact_certified.py::test_every_tax_component_is_counted_exactly_once" = 333 +"policyengine_uk/tests/test_childcare_entitlement_floor_properties.py::test_more_hours_used_never_lowers_childcare_support" = 330 +"policyengine_uk/tests/test_pension_credit_earnings_disregard_properties.py::test_statute_bounds_differential_and_monotonicity" = 330 +"policyengine_uk/tests/test_tax_credits_pension_credit_passport_properties.py::test_without_awards_pension_credit_alone_decides_the_passport" = 320 "policyengine_uk/tests/test_brma_region_default.py::test_brma_with_sparse_regions_follows_the_rule_and_keeps_regions" = 302 -"policyengine_uk/tests/test_housing_benefit_universal_credit_passport_properties.py::test_universal_credit_limb_dates" = 299 -"policyengine_uk/tests/test_pension_credit_child_amount_tax_credit_properties.py::test_results_do_not_depend_on_request_order" = 292 -"policyengine_uk/tests/test_from_reform_modifier.py::test_sequence_modifier_matches_apply_with_repeated_and_reordered_writes[True]" = 287 -"policyengine_uk/tests/test_pension_credit_earnings_disregard_properties.py::test_pension_credit_income_is_flat_in_earnings_under_the_disregard" = 265 -"policyengine_uk/tests/test_uc_single_claim_properties.py::test_a_flag_marking_no_single_claim_leaves_cap_and_lha_rules_alone" = 249 -"policyengine_uk/tests/test_council_tax_reduction_young_person_properties.py::test_schemes_differ_only_where_the_two_definitions_differ" = 240 -"policyengine_uk/tests/test_savings_credit_eligibility.py::test_savings_credit_generated_invariants" = 239 -"policyengine_uk/tests/test_uc_minimum_income_floor_properties.py::test_notional_deductions_equal_tax_on_threshold_as_only_income" = 235 -"policyengine_uk/tests/test_pension_credit_earnings_disregard_properties.py::test_earning_more_never_raises_pension_credit" = 233 -"policyengine_uk/tests/test_childcare_entitlement_floor_properties.py::test_raising_the_income_limit_never_lowers_support_or_income" = 225 -"policyengine_uk/tests/test_fiscal_partition.py::test_each_total_is_the_sum_of_its_heads" = 222 -"policyengine_uk/tests/test_council_tax_reduction_claimant_family_scheme_properties.py::test_other_families_do_not_change_a_claim" = 209 -"policyengine_uk/tests/test_uc_single_claim_properties.py::test_capital_includes_the_other_members" = 209 -"policyengine_uk/tests/test_benefit_cap_and_ctr_pension_age_properties.py::test_benefit_cap_and_ctr_pension_age_invariants" = 207 -"policyengine_uk/tests/test_uc_health_warnings.py::test_warning_iff_a_reformed_window_reaches_an_active_rebalancing_year" = 207 -"policyengine_uk/tests/test_pension_credit_child_amount_tax_credit_properties.py::test_award_removes_the_child_amount_and_nothing_else" = 199 -"policyengine_uk/tests/test_miscellaneous_loss_properties.py::test_a_miscellaneous_loss_changes_nothing_else" = 197 -"policyengine_uk/tests/test_date_of_birth.py::test_a_date_of_birth_input_matches_the_same_birthday_by_age" = 197 -"policyengine_uk/tests/test_sdlt_counted_once_properties.py::test_sdlt_is_counted_once_and_abolition_removes_it" = 191 -"policyengine_uk/tests/test_ni_class_1_age_properties.py::test_primary_class_1_stops_at_state_pension_age" = 191 -"policyengine_uk/tests/test_dated_reform_routes.py::test_calendar_year_changes_match_the_annualised_route" = 190 -"policyengine_uk/tests/test_current_education_order.py::test_enrolment_is_order_independent_and_matches_the_reference" = 188 -"policyengine_uk/tests/test_council_tax_reduction_young_person_properties.py::test_scheme_selection_over_every_combination" = 187 -"policyengine_uk/tests/test_lbtt_ltt_lease_rent_properties.py::test_rent_charged_over_two_years_telescopes" = 187 -"policyengine_uk/tests/test_ni_threshold_freeze.py::test_liabilities_follow_the_frozen_statute" = 186 -"policyengine_uk/tests/test_dated_reform_routes.py::test_reforms_leave_baselines_caches_and_later_simulations_alone" = 184 +"policyengine_uk/tests/aggregate_impact/test_aggregate_impact_certified.py::test_declared_double_counts_are_still_double_counted_by_the_model" = 301 +"policyengine_uk/tests/test_housing_benefit_universal_credit_passport_properties.py::test_universal_credit_limb_dates" = 296 +"policyengine_uk/tests/test_from_reform_modifier.py::test_sequence_modifier_matches_apply_with_repeated_and_reordered_writes[True]" = 288 +"policyengine_uk/tests/test_pension_credit_child_amount_tax_credit_properties.py::test_results_do_not_depend_on_request_order" = 286 +"policyengine_uk/tests/test_pension_credit_earnings_disregard_properties.py::test_pension_credit_income_is_flat_in_earnings_under_the_disregard" = 266 +"policyengine_uk/tests/test_uc_single_claim_properties.py::test_a_flag_marking_no_single_claim_leaves_cap_and_lha_rules_alone" = 244 +"policyengine_uk/tests/test_savings_credit_eligibility.py::test_savings_credit_generated_invariants" = 238 +"policyengine_uk/tests/test_council_tax_reduction_young_person_properties.py::test_schemes_differ_only_where_the_two_definitions_differ" = 237 +"policyengine_uk/tests/test_pension_credit_earnings_disregard_properties.py::test_earning_more_never_raises_pension_credit" = 234 +"policyengine_uk/tests/test_uc_minimum_income_floor_properties.py::test_notional_deductions_equal_tax_on_threshold_as_only_income" = 230 +"policyengine_uk/tests/test_childcare_entitlement_floor_properties.py::test_raising_the_income_limit_never_lowers_support_or_income" = 224 +"policyengine_uk/tests/test_fiscal_partition.py::test_each_total_is_the_sum_of_its_heads" = 219 +"policyengine_uk/tests/test_uc_single_claim_properties.py::test_capital_includes_the_other_members" = 211 +"policyengine_uk/tests/test_council_tax_reduction_claimant_family_scheme_properties.py::test_other_families_do_not_change_a_claim" = 208 +"policyengine_uk/tests/test_benefit_cap_and_ctr_pension_age_properties.py::test_benefit_cap_and_ctr_pension_age_invariants" = 205 +"policyengine_uk/tests/test_uc_health_warnings.py::test_warning_iff_a_reformed_window_reaches_an_active_rebalancing_year" = 205 +"policyengine_uk/tests/test_miscellaneous_loss_properties.py::test_a_miscellaneous_loss_changes_nothing_else" = 200 +"policyengine_uk/tests/test_pension_credit_child_amount_tax_credit_properties.py::test_award_removes_the_child_amount_and_nothing_else" = 198 +"policyengine_uk/tests/test_date_of_birth.py::test_a_date_of_birth_input_matches_the_same_birthday_by_age" = 195 +"policyengine_uk/tests/test_sdlt_counted_once_properties.py::test_sdlt_is_counted_once_and_abolition_removes_it" = 193 +"policyengine_uk/tests/test_current_education_order.py::test_enrolment_is_order_independent_and_matches_the_reference" = 190 +"policyengine_uk/tests/test_ni_class_1_age_properties.py::test_primary_class_1_stops_at_state_pension_age" = 190 +"policyengine_uk/tests/test_dated_reform_routes.py::test_calendar_year_changes_match_the_annualised_route" = 188 +"policyengine_uk/tests/test_ni_threshold_freeze.py::test_liabilities_follow_the_frozen_statute" = 187 +"policyengine_uk/tests/test_lbtt_ltt_lease_rent_properties.py::test_rent_charged_over_two_years_telescopes" = 186 +"policyengine_uk/tests/test_council_tax_reduction_young_person_properties.py::test_scheme_selection_over_every_combination" = 186 "policyengine_uk/tests/test_ni_class_4_properties.py::test_class_4_matches_statute_and_exact_regulation_100" = 182 -"policyengine_uk/tests/test_council_tax_reduction_pension_credit_properties.py::test_guarantee_credit_recipients_ctr_is_invariant_to_savings" = 182 "policyengine_uk/tests/test_dataframe_dataset.py::test_frames_the_previous_loader_read_give_the_same_inputs" = 182 -"policyengine_uk/tests/test_ni_class_4_properties.py::test_class_4_is_non_decreasing_in_profits" = 177 -"policyengine_uk/tests/test_ni_class_1_age_properties.py::test_secondary_class_1_continues_past_state_pension_age" = 174 -"policyengine_uk/tests/test_pension_credit_carer_income_properties.py::test_scottish_carer_supplement_is_not_means_tested_income" = 170 -"policyengine_uk/tests/test_council_tax_reduction_claimant_family_scheme_properties.py::test_scheme_follows_own_family" = 167 -"policyengine_uk/tests/test_uc_claimant_income_properties.py::test_dependants_earnings_do_not_lift_the_benefit_cap" = 166 -"policyengine_uk/tests/test_uc_state_pension_properties.py::test_property_income_is_excluded_while_state_pension_counts" = 165 -"policyengine_uk/tests/test_benefit_cap_specified_benefits_properties.py::test_non_dependent_adults_never_change_the_exemption" = 164 -"policyengine_uk/tests/test_pension_credit_reported_capital_properties.py::test_entitlement_never_rises_with_reported_capital" = 163 -"policyengine_uk/tests/test_council_tax_reduction_claimant_family_scheme_properties.py::test_exemption_is_the_applicants_own" = 162 +"policyengine_uk/tests/test_dated_reform_routes.py::test_reforms_leave_baselines_caches_and_later_simulations_alone" = 180 +"policyengine_uk/tests/test_ni_class_4_properties.py::test_class_4_is_non_decreasing_in_profits" = 178 +"policyengine_uk/tests/test_council_tax_reduction_pension_credit_properties.py::test_guarantee_credit_recipients_ctr_is_invariant_to_savings" = 177 +"policyengine_uk/tests/test_ni_class_1_age_properties.py::test_secondary_class_1_continues_past_state_pension_age" = 175 +"policyengine_uk/tests/test_council_tax_reduction_claimant_family_scheme_properties.py::test_scheme_follows_own_family" = 169 +"policyengine_uk/tests/test_pension_credit_carer_income_properties.py::test_scottish_carer_supplement_is_not_means_tested_income" = 166 +"policyengine_uk/tests/test_benefit_cap_specified_benefits_properties.py::test_non_dependent_adults_never_change_the_exemption" = 165 +"policyengine_uk/tests/test_pension_credit_reported_capital_properties.py::test_entitlement_never_rises_with_reported_capital" = 164 +"policyengine_uk/tests/test_uc_state_pension_properties.py::test_property_income_is_excluded_while_state_pension_counts" = 163 +"policyengine_uk/tests/test_uc_claimant_income_properties.py::test_dependants_earnings_do_not_lift_the_benefit_cap" = 161 +"policyengine_uk/tests/test_process_time_reforms.py::test_the_state_pension_is_non_decreasing_in_the_minimum_rate" = 160 +"policyengine_uk/tests/test_council_tax_reduction_claimant_family_scheme_properties.py::test_exemption_is_the_applicants_own" = 159 "policyengine_uk/tests/test_benefit_cap_specified_benefits_properties.py::test_exemption_matches_regulations" = 159 -"policyengine_uk/tests/test_pension_annual_allowance_properties.py::test_contributions_above_the_allowance_are_not_taxed_twice" = 157 -"policyengine_uk/tests/test_process_time_reforms.py::test_the_state_pension_is_non_decreasing_in_the_minimum_rate" = 157 -"policyengine_uk/tests/test_dated_reform_routes.py::test_indexed_threshold_schedules_match_prior_law" = 156 -"policyengine_uk/tests/test_uc_single_claim_properties.py::test_benefit_cap_rate_and_exceptions" = 156 -"policyengine_uk/tests/test_uc_claimant_elements_properties.py::test_member_order_does_not_change_the_elements" = 156 +"policyengine_uk/tests/test_uc_single_claim_properties.py::test_benefit_cap_rate_and_exceptions" = 157 "policyengine_uk/tests/test_dataframe_dataset.py::test_an_exported_frame_loads_back_and_exports_itself" = 156 -"policyengine_uk/tests/test_household_head_agreement_properties.py::test_flags_matter_only_through_the_head" = 156 +"policyengine_uk/tests/test_pension_annual_allowance_properties.py::test_contributions_above_the_allowance_are_not_taxed_twice" = 155 "policyengine_uk/tests/test_dated_reform_routes.py::test_restating_a_parameters_own_value_changes_nothing" = 155 -"policyengine_uk/tests/test_maintenance_loan_proxies.py::test_proxy_outputs_do_not_depend_on_what_was_calculated_first" = 154 -"policyengine_uk/tests/test_council_tax_reduction_pension_credit_properties.py::test_not_claiming_pension_credit_never_raises_a_recipients_ctr" = 153 -"policyengine_uk/tests/test_pension_credit_reported_capital_properties.py::test_locality" = 153 -"policyengine_uk/tests/test_dated_reform_routes.py::test_no_change_reaches_a_year_before_it_starts" = 152 -"policyengine_uk/tests/test_benefit_cap_specified_benefits_properties.py::test_exempt_families_have_no_cap_and_others_the_statutory_cap" = 152 -"policyengine_uk/tests/test_council_tax_reduction_claimant_properties.py::test_claimant_does_not_follow_age" = 152 -"policyengine_uk/tests/test_uc_legacy_closure_properties.py::test_a_closure_claim_pays_the_universal_credit_of_any_claim" = 150 +"policyengine_uk/tests/test_maintenance_loan_proxies.py::test_proxy_outputs_do_not_depend_on_what_was_calculated_first" = 155 +"policyengine_uk/tests/test_dated_reform_routes.py::test_indexed_threshold_schedules_match_prior_law" = 154 +"policyengine_uk/tests/test_uc_claimant_elements_properties.py::test_member_order_does_not_change_the_elements" = 153 +"policyengine_uk/tests/test_council_tax_reduction_claimant_properties.py::test_claimant_does_not_follow_age" = 153 +"policyengine_uk/tests/test_household_head_agreement_properties.py::test_flags_matter_only_through_the_head" = 152 +"policyengine_uk/tests/test_pension_credit_reported_capital_properties.py::test_locality" = 151 +"policyengine_uk/tests/test_benefit_cap_specified_benefits_properties.py::test_exempt_families_have_no_cap_and_others_the_statutory_cap" = 151 "policyengine_uk/tests/test_ltt_lbtt_expected_properties.py::test_ltt_and_lbtt_enter_the_totals_once_at_full_value" = 149 -"policyengine_uk/tests/test_uc_claimant_elements_properties.py::test_a_claimants_limited_capability_never_lowers_the_elements" = 149 -"policyengine_uk/tests/test_brma_region_default.py::test_brma_follows_the_rule_in_any_order" = 144 -"policyengine_uk/tests/test_uc_work_related_groups_properties.py::test_scope_holds_whichever_member_is_nominated" = 141 -"policyengine_uk/tests/test_state_pension_components.py::test_full_rate_reforms_never_move_the_add_on" = 140 -"policyengine_uk/tests/test_severe_disability_afcs_properties.py::test_afcs_payments_never_change_severe_disability" = 137 +"policyengine_uk/tests/test_council_tax_reduction_pension_credit_properties.py::test_not_claiming_pension_credit_never_raises_a_recipients_ctr" = 149 +"policyengine_uk/tests/test_uc_legacy_closure_properties.py::test_a_closure_claim_pays_the_universal_credit_of_any_claim" = 148 +"policyengine_uk/tests/test_dated_reform_routes.py::test_no_change_reaches_a_year_before_it_starts" = 148 +"policyengine_uk/tests/test_uc_claimant_elements_properties.py::test_a_claimants_limited_capability_never_lowers_the_elements" = 147 +"policyengine_uk/tests/test_uc_work_related_groups_properties.py::test_scope_holds_whichever_member_is_nominated" = 144 +"policyengine_uk/tests/test_brma_region_default.py::test_brma_follows_the_rule_in_any_order" = 142 +"policyengine_uk/tests/test_state_pension_components.py::test_full_rate_reforms_never_move_the_add_on" = 138 "policyengine_uk/tests/test_benefit_cap_and_ctr_pension_age_properties.py::test_a_pension_age_partner_never_exempts_a_uc_award" = 136 -"policyengine_uk/tests/test_uc_claimant_income_properties.py::test_dependants_income_never_changes_universal_credit" = 135 -"policyengine_uk/tests/test_uc_claimant_income_properties.py::test_member_order_does_not_matter" = 134 -"policyengine_uk/tests/test_uc_legacy_closure_properties.py::test_the_closure_flag_only_decides_closure_claims" = 134 -"policyengine_uk/tests/test_uc_claimant_elements_properties.py::test_both_claimants_limited_capability_gives_one_lcwra_element" = 131 -"policyengine_uk/tests/test_childcare_entitlement_floor_properties.py::test_becoming_eligible_never_lowers_childcare_support" = 130 -"policyengine_uk/tests/test_means_test_income_properties.py::test_income_of_non_claimants_never_counts" = 128 -"policyengine_uk/tests/test_savings_credit_only_receipt_properties.py::test_pension_credit_freeze_keeps_the_baseline_receipt" = 126 -"policyengine_uk/tests/test_council_tax_reduction_carer_income_properties.py::test_council_tax_reduction_income_ignores_the_scottish_carer_supplement" = 124 -"policyengine_uk/tests/test_labour_supply_dynamics_properties.py::test_dynamics_respond_only_for_included_people" = 123 -"policyengine_uk/tests/test_uc_claimant_elements_properties.py::test_dependants_disability_or_caring_never_gives_claimants_an_element" = 123 +"policyengine_uk/tests/test_severe_disability_afcs_properties.py::test_afcs_payments_never_change_severe_disability" = 134 +"policyengine_uk/tests/test_uc_claimant_income_properties.py::test_dependants_income_never_changes_universal_credit" = 134 +"policyengine_uk/tests/test_uc_legacy_closure_properties.py::test_the_closure_flag_only_decides_closure_claims" = 133 +"policyengine_uk/tests/test_uc_claimant_income_properties.py::test_member_order_does_not_matter" = 132 +"policyengine_uk/tests/test_childcare_entitlement_floor_properties.py::test_becoming_eligible_never_lowers_childcare_support" = 131 +"policyengine_uk/tests/test_uc_claimant_elements_properties.py::test_both_claimants_limited_capability_gives_one_lcwra_element" = 130 +"policyengine_uk/tests/test_means_test_income_properties.py::test_income_of_non_claimants_never_counts" = 127 +"policyengine_uk/tests/test_council_tax_reduction_carer_income_properties.py::test_council_tax_reduction_income_ignores_the_scottish_carer_supplement" = 125 +"policyengine_uk/tests/test_savings_credit_only_receipt_properties.py::test_pension_credit_freeze_keeps_the_baseline_receipt" = 123 +"policyengine_uk/tests/test_claims_all_entitled_benefits.py::test_ctr_is_zero_for_every_nonreporter_without_an_explicit_claim_flag" = 123 +"policyengine_uk/tests/test_labour_supply_dynamics_properties.py::test_dynamics_respond_only_for_included_people" = 122 "policyengine_uk/tests/test_council_tax_reduction_pension_credit_properties.py::test_guarantee_credit_recipients_ctr_is_invariant_to_state_pension" = 122 -"policyengine_uk/tests/test_claims_all_entitled_benefits.py::test_ctr_is_zero_for_every_nonreporter_without_an_explicit_claim_flag" = 121 -"policyengine_uk/tests/test_targeted_childcare_guarantee_credit_properties.py::test_fix_only_removes_the_unpaid_guarantee_credit_route" = 120 +"policyengine_uk/tests/test_uc_claimant_elements_properties.py::test_dependants_disability_or_caring_never_gives_claimants_an_element" = 121 "policyengine_uk/tests/test_date_of_birth.py::test_cutoffs_follow_the_date_of_birth" = 120 -"policyengine_uk/tests/test_means_test_income_properties.py::test_income_of_children_and_young_persons_never_counts" = 119 +"policyengine_uk/tests/test_benunit_reported_capital_properties.py::test_uc_never_rises_with_recorded_capital" = 120 "policyengine_uk/tests/test_savings_credit_only_receipt_properties.py::test_stopping_pension_credit_payments_ends_receipt" = 119 -"policyengine_uk/tests/test_uc_earnings_deductions_properties.py::test_uc_is_non_increasing_in_unearned_income" = 119 -"policyengine_uk/tests/test_benunit_reported_capital_properties.py::test_uc_never_rises_with_recorded_capital" = 119 "policyengine_uk/tests/test_uc_standard_allowance_uplift.py::test_growth_is_cpi_times_the_change_in_uplift" = 118 -"policyengine_uk/tests/test_uc_unearned_benefits_properties.py::test_uc_falls_pound_for_pound_in_each_benefit" = 118 -"policyengine_uk/tests/test_uc_work_related_groups_properties.py::test_scope_rules_never_raise_earned_income" = 118 -"policyengine_uk/tests/test_uc_unearned_benefits_properties.py::test_uc_is_non_increasing_in_each_benefit" = 117 +"policyengine_uk/tests/test_targeted_childcare_guarantee_credit_properties.py::test_fix_only_removes_the_unpaid_guarantee_credit_route" = 117 +"policyengine_uk/tests/test_means_test_income_properties.py::test_income_of_children_and_young_persons_never_counts" = 117 +"policyengine_uk/tests/test_uc_earnings_deductions_properties.py::test_uc_is_non_increasing_in_unearned_income" = 117 "policyengine_uk/tests/test_uc_earnings_deductions_properties.py::test_fix_only_removes_deductions" = 116 -"policyengine_uk/tests/test_uc_company_owner_properties.py::test_capital_and_earnings_identities" = 116 +"policyengine_uk/tests/test_uc_unearned_benefits_properties.py::test_uc_is_non_increasing_in_each_benefit" = 116 +"policyengine_uk/tests/test_uc_work_related_groups_properties.py::test_scope_rules_never_raise_earned_income" = 116 +"policyengine_uk/tests/test_uc_company_owner_properties.py::test_capital_and_earnings_identities" = 115 +"policyengine_uk/tests/test_uc_unearned_benefits_properties.py::test_uc_falls_pound_for_pound_in_each_benefit" = 115 "policyengine_uk/tests/test_dataframe_dataset.py::test_a_reloaded_simulation_reads_the_same_identifiers_in_each_year_given_inputs" = 115 -"policyengine_uk/tests/test_dated_reform_routes.py::test_preserve_calendar_dates_changes_keep_their_dates" = 114 -"policyengine_uk/tests/test_council_tax_reduction_applicant_properties.py::test_head_applying_alone_matches_her_own_benefit_unit" = 114 -"policyengine_uk/tests/test_uc_income_from_capital_properties.py::test_interest_dividends_and_rent_leave_the_award_unchanged" = 114 -"policyengine_uk/tests/test_council_tax_reduction_young_person_properties.py::test_lone_parent_and_working_age_personal_allowance" = 114 +"policyengine_uk/tests/test_salary_sacrifice_ni_measure_properties.py::test_measures_equal_the_difference_of_complete_liabilities[rates change within the year]" = 112 "policyengine_uk/tests/test_benunit_reported_capital_properties.py::test_financial_capital_matches_complete_override_without_nonfinancial_assets" = 112 -"policyengine_uk/tests/test_salary_sacrifice_ni_measure_properties.py::test_measures_equal_the_difference_of_complete_liabilities[rates change within the year]" = 111 -"policyengine_uk/tests/test_council_tax_reduction_applicant_properties.py::test_council_tax_reduction_assesses_the_liable_head" = 110 -"policyengine_uk/tests/test_income_support_gate_reads_claimant_or_partner_awards.py::test_the_switched_gate_matches_the_replaced_code" = 110 -"policyengine_uk/tests/test_income_support_gate_reads_claimant_or_partner_awards.py::test_the_limbs_read_every_stored_value_as_intended" = 109 +"policyengine_uk/tests/test_council_tax_reduction_young_person_properties.py::test_lone_parent_and_working_age_personal_allowance" = 112 +"policyengine_uk/tests/test_uc_income_from_capital_properties.py::test_interest_dividends_and_rent_leave_the_award_unchanged" = 111 +"policyengine_uk/tests/test_dated_reform_routes.py::test_preserve_calendar_dates_changes_keep_their_dates" = 111 +"policyengine_uk/tests/test_council_tax_reduction_applicant_properties.py::test_head_applying_alone_matches_her_own_benefit_unit" = 111 +"policyengine_uk/tests/test_income_support_gate_reads_claimant_or_partner_awards.py::test_the_limbs_read_every_stored_value_as_intended" = 110 "policyengine_uk/tests/test_targeted_childcare_guarantee_credit_properties.py::test_not_claiming_pension_credit_never_makes_a_family_eligible" = 109 -"policyengine_uk/tests/test_income_support_eligibility_properties.py::test_excluded_member_never_changes_is_eligibility" = 109 "policyengine_uk/tests/test_wealth_tax_net_base_properties.py::test_wealth_tax_is_the_schedule_on_net_wealth" = 109 -"policyengine_uk/tests/test_uc_earnings_deductions_properties.py::test_deductions_equal_tax_and_ni_on_earnings_alone" = 109 -"policyengine_uk/tests/test_salary_sacrifice_ni_measure_properties.py::test_measures_equal_the_difference_of_complete_liabilities[full-year Category A directors]" = 109 -"policyengine_uk/tests/test_uc_unearned_benefits_properties.py::test_carer_support_payment_counts_like_capped_private_pension" = 109 -"policyengine_uk/tests/test_dataframe_dataset.py::test_a_frame_over_several_years_exports_the_same_frame_again" = 108 +"policyengine_uk/tests/test_income_support_eligibility_properties.py::test_excluded_member_never_changes_is_eligibility" = 109 +"policyengine_uk/tests/test_council_tax_reduction_applicant_properties.py::test_council_tax_reduction_assesses_the_liable_head" = 108 +"policyengine_uk/tests/test_disable_simulated_benefits_benefit_cap.py::test_the_benefit_cap_matches_the_replaced_readers_with_the_reform_off" = 108 +"policyengine_uk/tests/test_income_support_gate_reads_claimant_or_partner_awards.py::test_the_switched_gate_matches_the_replaced_code" = 107 +"policyengine_uk/tests/test_dataframe_dataset.py::test_a_frame_over_several_years_exports_the_same_frame_again" = 107 "policyengine_uk/tests/test_capital_share_components.py::test_share_like_capital_keeps_the_supplied_aggregate" = 107 -"policyengine_uk/tests/test_dated_reform_routes.py::test_reformed_annual_values_match_the_oracle" = 107 -"policyengine_uk/tests/test_uc_income_from_capital_properties.py::test_uc_is_non_increasing_in_capital" = 107 -"policyengine_uk/tests/test_disable_simulated_benefits_benefit_cap.py::test_the_benefit_cap_matches_the_replaced_readers_with_the_reform_off" = 107 -"policyengine_uk/tests/test_uc_earnings_deductions_properties.py::test_unearned_income_never_changes_earned_income" = 107 +"policyengine_uk/tests/test_uc_unearned_benefits_properties.py::test_carer_support_payment_counts_like_capped_private_pension" = 107 "policyengine_uk/tests/test_uc_single_claim_properties.py::test_maximum_amount_is_the_solo_claimants" = 107 +"policyengine_uk/tests/test_uc_earnings_deductions_properties.py::test_unearned_income_never_changes_earned_income" = 107 +"policyengine_uk/tests/test_uc_earnings_deductions_properties.py::test_deductions_equal_tax_and_ni_on_earnings_alone" = 107 +"policyengine_uk/tests/test_salary_sacrifice_ni_measure_properties.py::test_measures_equal_the_difference_of_complete_liabilities[full-year Category A directors]" = 107 +"policyengine_uk/tests/test_housing_benefit_universal_credit_passport_properties.py::test_calculation_order_does_not_change_results" = 106 "policyengine_uk/tests/test_benefit_cap_lha_scheme_split_properties.py::test_awards_are_the_old_awards_where_the_caps_agree" = 106 -"policyengine_uk/tests/test_uc_income_from_capital_properties.py::test_interest_dividends_and_rent_do_not_enter_the_means_test" = 105 -"policyengine_uk/tests/test_uc_company_owner_properties.py::test_rule_is_inert_when_it_does_not_apply" = 105 -"policyengine_uk/tests/test_housing_benefit_universal_credit_passport_properties.py::test_calculation_order_does_not_change_results" = 105 -"policyengine_uk/tests/test_severe_disability_addition_properties.py::test_addition_matches_the_reference_and_is_bounded" = 105 +"policyengine_uk/tests/test_dated_reform_routes.py::test_reformed_annual_values_match_the_oracle" = 106 "policyengine_uk/tests/test_income_support_eligibility_properties.py::test_is_eligibility_matches_a_family_by_family_reading" = 105 +"policyengine_uk/tests/test_dfe_childcare_student_support_properties.py::test_extended_childcare_eligibility_matches_regs_13_to_15" = 105 "policyengine_uk/tests/test_benefit_cap_lha_scheme_split_properties.py::test_exceptions_are_the_old_exception_where_the_schemes_agree" = 105 -"policyengine_uk/tests/test_dfe_childcare_student_support_properties.py::test_extended_childcare_eligibility_matches_regs_13_to_15" = 104 -"policyengine_uk/tests/test_pension_credit_child_amount_tax_credit_properties.py::test_no_award_after_tax_credits_ended" = 104 +"policyengine_uk/tests/test_uc_company_owner_properties.py::test_rule_is_inert_when_it_does_not_apply" = 104 +"policyengine_uk/tests/test_uc_income_from_capital_properties.py::test_uc_is_non_increasing_in_capital" = 104 "policyengine_uk/tests/test_benefit_cap_lha_scheme_split_properties.py::test_maximum_rent_reads_the_housing_benefit_category" = 104 -"policyengine_uk/tests/test_benefit_cap_lha_scheme_split_properties.py::test_cap_rate_is_the_old_rate_where_the_schemes_agree" = 103 -"policyengine_uk/tests/test_severe_disability_addition_properties.py::test_residence_condition_is_metamorphic" = 102 -"policyengine_uk/tests/test_uc_unearned_benefits_properties.py::test_each_benefit_counts_like_private_pension" = 102 +"policyengine_uk/tests/test_benefit_cap_lha_scheme_split_properties.py::test_cap_rate_is_the_old_rate_where_the_schemes_agree" = 104 +"policyengine_uk/tests/test_severe_disability_addition_properties.py::test_addition_matches_the_reference_and_is_bounded" = 104 +"policyengine_uk/tests/test_uc_income_from_capital_properties.py::test_interest_dividends_and_rent_do_not_enter_the_means_test" = 103 +"policyengine_uk/tests/test_pension_credit_child_amount_tax_credit_properties.py::test_no_award_after_tax_credits_ended" = 103 "policyengine_uk/tests/test_income_support_gate_reads_claimant_or_partner_awards.py::test_an_entered_claimant_or_partner_award_alone_decides_its_limb" = 102 -"policyengine_uk/tests/test_dfe_childcare_student_support_properties.py::test_maintenance_loan_household_income_applies_the_age_25_test" = 101 +"policyengine_uk/tests/test_uc_unearned_benefits_properties.py::test_each_benefit_counts_like_private_pension" = 102 +"policyengine_uk/tests/test_severe_disability_addition_properties.py::test_residence_condition_is_metamorphic" = 101 +"policyengine_uk/tests/test_benefit_cap_lha_scheme_split_properties.py::test_lha_category_is_the_claimed_schemes_old_category" = 101 "policyengine_uk/tests/test_severe_disability_addition_properties.py::test_shared_carer_attribution_matches_the_reference_matching" = 101 -"policyengine_uk/tests/test_benefit_cap_lha_scheme_split_properties.py::test_lha_category_is_the_claimed_schemes_old_category" = 100 -"policyengine_uk/tests/test_uc_single_claim_properties.py::test_deduction_is_the_joint_claimants" = 100 +"policyengine_uk/tests/test_dfe_childcare_student_support_properties.py::test_maintenance_loan_household_income_applies_the_age_25_test" = 100 "policyengine_uk/tests/test_severe_disability_addition_properties.py::test_legacy_premium_equals_the_addition_without_young_people" = 100 "policyengine_uk/tests/test_pension_annual_allowance_properties.py::test_extra_contributions_never_raise_tax_by_more_than_the_charge" = 100 +"policyengine_uk/tests/test_uc_single_claim_properties.py::test_deduction_is_the_joint_claimants" = 99 "policyengine_uk/tests/test_housing_benefit_specified_accommodation_disregard_properties.py::test_disregard_is_non_decreasing_in_earnings" = 99 -"policyengine_uk/tests/test_uc_minimum_income_floor_properties.py::test_more_earnings_never_lower_earned_income_or_raise_uc" = 99 -"policyengine_uk/tests/test_savings_allowance_properties.py::test_scottish_and_english_taxpayers_get_the_same_allowance" = 97 -"policyengine_uk/tests/test_absolute_poverty_reference_year.py::test_absolute_poverty_flags_follow_the_line" = 97 -"policyengine_uk/tests/test_ni_secondary_threshold.py::test_employer_ni_follows_the_statutory_threshold" = 97 -"policyengine_uk/tests/test_uc_state_pension_properties.py::test_state_pension_counts_like_private_pension" = 97 -"policyengine_uk/tests/test_uc_work_related_groups_properties.py::test_qualifying_age_route_moves_only_claimants_past_it" = 97 -"policyengine_uk/tests/test_uc_earned_income_before_work_allowance_properties.py::test_more_pay_never_turns_the_childcare_criterion_on" = 96 -"policyengine_uk/tests/test_legacy_award_work_properties.py::test_screens_match_a_family_by_family_reading" = 96 -"policyengine_uk/tests/test_dated_reform_routes.py::test_a_schedule_of_two_changes_matches_the_oracle" = 96 -"policyengine_uk/tests/test_uc_company_owner_properties.py::test_dependant_company_does_not_change_the_award" = 96 -"policyengine_uk/tests/test_council_tax_reduction_young_person_properties.py::test_each_scheme_reads_its_own_young_person" = 96 -"policyengine_uk/tests/test_pension_contribution_deduction_rate_properties.py::test_each_scheme_moves_by_contributions_times_its_own_change_in_share" = 96 +"policyengine_uk/tests/test_absolute_poverty_reference_year.py::test_absolute_poverty_flags_follow_the_line" = 98 +"policyengine_uk/tests/test_ni_secondary_threshold.py::test_employer_ni_follows_the_statutory_threshold" = 98 +"policyengine_uk/tests/test_uc_minimum_income_floor_properties.py::test_more_earnings_never_lower_earned_income_or_raise_uc" = 98 +"policyengine_uk/tests/test_dfe_childcare_student_support_properties.py::test_tax_free_childcare_work_condition_matches_reg_13" = 97 +"policyengine_uk/tests/test_claimant_not_own_child_properties.py::test_child_benefit_entitlement_counts_only_other_members" = 97 "policyengine_uk/tests/test_rent_of_sharers_boarders_and_lodgers_properties.py::test_meals_and_council_tax" = 96 -"policyengine_uk/tests/test_claimant_not_own_child_properties.py::test_child_benefit_entitlement_counts_only_other_members" = 96 -"policyengine_uk/tests/test_simulation_dataset_sources.py::test_saved_datasets_have_exactly_one_schema_and_load" = 96 -"policyengine_uk/tests/test_dfe_childcare_student_support_properties.py::test_tax_free_childcare_work_condition_matches_reg_13" = 95 -"policyengine_uk/tests/test_uc_state_pension_properties.py::test_uc_falls_pound_for_pound_in_state_pension" = 95 -"policyengine_uk/tests/test_uc_state_pension_properties.py::test_uc_is_non_increasing_in_state_pension" = 95 +"policyengine_uk/tests/test_uc_state_pension_properties.py::test_uc_falls_pound_for_pound_in_state_pension" = 96 +"policyengine_uk/tests/test_uc_work_related_groups_properties.py::test_qualifying_age_route_moves_only_claimants_past_it" = 96 +"policyengine_uk/tests/test_uc_earned_income_before_work_allowance_properties.py::test_more_pay_never_turns_the_childcare_criterion_on" = 96 +"policyengine_uk/tests/test_legacy_award_work_properties.py::test_screens_match_a_family_by_family_reading" = 95 +"policyengine_uk/tests/test_dated_reform_routes.py::test_a_schedule_of_two_changes_matches_the_oracle" = 95 +"policyengine_uk/tests/test_uc_state_pension_properties.py::test_state_pension_counts_like_private_pension" = 95 "policyengine_uk/tests/test_claimant_not_own_child_properties.py::test_claimants_own_circumstances_never_change_child_amounts" = 95 +"policyengine_uk/tests/test_council_tax_reduction_young_person_properties.py::test_each_scheme_reads_its_own_young_person" = 95 +"policyengine_uk/tests/test_savings_allowance_properties.py::test_scottish_and_english_taxpayers_get_the_same_allowance" = 95 +"policyengine_uk/tests/test_simulation_dataset_sources.py::test_saved_datasets_have_exactly_one_schema_and_load" = 95 "policyengine_uk/tests/test_uc_work_related_groups_properties.py::test_more_earnings_never_lower_earned_income_or_raise_uc" = 95 -"policyengine_uk/tests/test_lbtt_ltt_lease_rent_properties.py::test_lease_rent_matches_bands_and_exemptions" = 94 -"policyengine_uk/tests/test_benefit_cap_lha_scheme_split_properties.py::test_each_scheme_reduces_by_its_own_excess" = 94 -"policyengine_uk/tests/test_dated_reform_routes.py::test_boolean_changes_match_the_oracle" = 93 -"policyengine_uk/tests/test_housing_benefit_specified_accommodation_disregard_properties.py::test_no_para_18_amount_without_the_input" = 93 -"policyengine_uk/tests/test_uc_childcare_work_condition_properties.py::test_dependants_do_not_affect_the_condition" = 93 +"policyengine_uk/tests/test_lbtt_ltt_lease_rent_properties.py::test_lease_rent_matches_bands_and_exemptions" = 95 +"policyengine_uk/tests/test_pension_contribution_deduction_rate_properties.py::test_each_scheme_moves_by_contributions_times_its_own_change_in_share" = 95 +"policyengine_uk/tests/test_benefit_cap_lha_scheme_split_properties.py::test_each_scheme_reduces_by_its_own_excess" = 95 +"policyengine_uk/tests/test_uc_company_owner_properties.py::test_dependant_company_does_not_change_the_award" = 94 +"policyengine_uk/tests/test_uc_state_pension_properties.py::test_uc_is_non_increasing_in_state_pension" = 94 +"policyengine_uk/tests/test_dated_reform_routes.py::test_boolean_changes_match_the_oracle" = 94 "policyengine_uk/tests/test_date_of_birth.py::test_children_are_ordered_by_date_of_birth" = 92 -"policyengine_uk/tests/test_labour_supply_response_baseline.py::test_response_scales_with_the_elasticities" = 92 -"policyengine_uk/tests/test_uc_unearned_benefits_properties.py::test_uc_falls_pound_for_pound_in_counted_carer_support_payment" = 91 -"policyengine_uk/tests/test_dated_reform_routes.py::test_current_laws_own_first_value_from_a_growth_series_first_year_changes_nothing[gov.economic_assumptions.yoy_growth.obr.per_capita.gdp]" = 91 -"policyengine_uk/tests/test_uc_childcare_work_condition_properties.py::test_adding_an_exception_or_work_never_removes_the_condition" = 91 +"policyengine_uk/tests/test_uc_unearned_benefits_properties.py::test_uc_falls_pound_for_pound_in_counted_carer_support_payment" = 92 +"policyengine_uk/tests/test_uc_childcare_work_condition_properties.py::test_dependants_do_not_affect_the_condition" = 92 +"policyengine_uk/tests/test_labour_supply_response_baseline.py::test_response_scales_with_the_elasticities" = 91 +"policyengine_uk/tests/test_housing_benefit_specified_accommodation_disregard_properties.py::test_no_para_18_amount_without_the_input" = 91 +"policyengine_uk/tests/test_uc_work_related_groups_properties.py::test_partner_who_cannot_be_a_joint_claimant" = 91 +"policyengine_uk/tests/test_legacy_award_work_properties.py::test_more_work_never_makes_a_family_eligible" = 91 "policyengine_uk/tests/test_uc_unearned_benefits_properties.py::test_uc_is_non_increasing_in_carer_support_payment" = 91 -"policyengine_uk/tests/test_legacy_award_work_properties.py::test_more_work_never_makes_a_family_eligible" = 90 -"policyengine_uk/tests/test_council_tax_reduction_claimant_properties.py::test_no_op_where_head_is_eldest" = 90 -"policyengine_uk/tests/test_uc_work_related_groups_properties.py::test_partner_who_cannot_be_a_joint_claimant" = 90 -"policyengine_uk/tests/test_claims_all_entitled_benefits.py::test_data_built_takeup_equals_reported_only" = 90 +"policyengine_uk/tests/test_uc_childcare_work_condition_properties.py::test_adding_an_exception_or_work_never_removes_the_condition" = 90 "policyengine_uk/tests/test_marriage_allowance_cps_switch.py::test_the_allowance_never_falls_as_the_statutory_rate_rises" = 90 -"policyengine_uk/tests/test_uprating_inputs_reach_data.py::test_a_growth_reform_moves_the_data_in_its_year_only" = 90 "policyengine_uk/tests/test_housing_benefit_pension_age_properties.py::test_would_claim_uc_does_not_affect_pension_age_housing_benefit" = 90 -"policyengine_uk/tests/test_pension_credit_child_amount_tax_credit_properties.py::test_no_child_amount_before_schedule_iia" = 90 -"policyengine_uk/tests/test_housing_benefit_pension_age_properties.py::test_pension_age_housing_benefit_is_non_increasing_in_income" = 89 -"policyengine_uk/tests/test_legacy_award_work_properties.py::test_member_outside_the_family_never_changes_the_couples_screen" = 89 +"policyengine_uk/tests/test_housing_benefit_specified_accommodation_disregard_properties.py::test_the_input_never_lowers_the_disregard" = 90 +"policyengine_uk/tests/test_dated_reform_routes.py::test_current_laws_own_first_value_from_a_growth_series_first_year_changes_nothing[gov.economic_assumptions.yoy_growth.obr.per_capita.gdp]" = 90 +"policyengine_uk/tests/test_uprating_inputs_reach_data.py::test_a_growth_reform_moves_the_data_in_its_year_only" = 89 "policyengine_uk/tests/test_pension_annual_allowance_properties.py::test_unused_allowance_reduces_chargeable_amount_one_for_one" = 89 -"policyengine_uk/tests/test_uc_claimant_elements_properties.py::test_carers_of_the_same_person_have_at_most_one_carer_element" = 89 -"policyengine_uk/tests/test_housing_benefit_specified_accommodation_disregard_properties.py::test_the_input_never_lowers_the_disregard" = 89 +"policyengine_uk/tests/test_council_tax_reduction_claimant_properties.py::test_no_op_where_head_is_eldest" = 89 "policyengine_uk/tests/test_child_and_adult_definitions_properties.py::test_valid_family_partition_and_adding_a_child_preserves_claimants" = 89 -"policyengine_uk/tests/test_uc_property_capital.py::test_capital_is_independent_of_person_and_benefit_unit_row_order" = 88 +"policyengine_uk/tests/test_claims_all_entitled_benefits.py::test_data_built_takeup_equals_reported_only" = 88 +"policyengine_uk/tests/test_housing_benefit_pension_age_properties.py::test_pension_age_housing_benefit_is_non_increasing_in_income" = 88 "policyengine_uk/tests/test_child_and_adult_definitions_properties.py::test_programme_definitions_with_generated_entry_and_household_context" = 88 +"policyengine_uk/tests/test_pension_credit_child_amount_tax_credit_properties.py::test_no_child_amount_before_schedule_iia" = 88 "policyengine_uk/tests/test_process_time_reforms.py::test_each_growth_rate_moves_its_index_in_the_year_it_is_shown" = 88 -"policyengine_uk/tests/test_severe_disability_addition_properties.py::test_a_carer_benefit_never_increases_the_addition" = 88 -"policyengine_uk/tests/test_savings_allowance_properties.py::test_a_higher_pay_never_raises_the_allowance" = 87 -"policyengine_uk/tests/test_child_and_adult_definitions_properties.py::test_all_deprecated_shims_and_explicit_age_ranks_keep_frozen_semantics" = 87 -"policyengine_uk/tests/test_council_tax_reduction_claimant_properties.py::test_claimant_invariants" = 87 -"policyengine_uk/tests/test_housing_benefit_guarantee_credit_passport_properties.py::test_not_claiming_guarantee_credit_never_raises_housing_benefit" = 87 +"policyengine_uk/tests/test_legacy_award_work_properties.py::test_member_outside_the_family_never_changes_the_couples_screen" = 88 +"policyengine_uk/tests/test_uc_property_capital.py::test_capital_is_independent_of_person_and_benefit_unit_row_order" = 87 "policyengine_uk/tests/test_legacy_award_work_properties.py::test_caring_never_ends_esa_and_never_matters_for_jsa" = 87 -"policyengine_uk/tests/test_trading_loss_properties.py::test_means_tests_see_the_loss_only_through_tax" = 86 +"policyengine_uk/tests/test_housing_benefit_guarantee_credit_passport_properties.py::test_not_claiming_guarantee_credit_never_raises_housing_benefit" = 87 +"policyengine_uk/tests/test_council_tax_reduction_claimant_properties.py::test_claimant_invariants" = 87 +"policyengine_uk/tests/test_child_and_adult_definitions_properties.py::test_all_deprecated_shims_and_explicit_age_ranks_keep_frozen_semantics" = 87 +"policyengine_uk/tests/test_pension_credit_statutory_pay_properties.py::test_moving_pay_between_wages_and_statutory_pay" = 87 +"policyengine_uk/tests/test_uc_claimant_elements_properties.py::test_carers_of_the_same_person_have_at_most_one_carer_element" = 87 "policyengine_uk/tests/test_child_and_adult_definitions_properties.py::test_flagging_the_claimant_as_a_parent_never_adds_a_partner" = 86 -"policyengine_uk/tests/test_pension_credit_statutory_pay_properties.py::test_moving_pay_between_wages_and_statutory_pay" = 86 -"policyengine_uk/tests/test_claimant_not_own_child_properties.py::test_claimants_are_never_their_units_children_and_others_keep_status" = 86 "policyengine_uk/tests/test_household_benefits_properties.py::test_benefit_uprating_applies_to_each_benefit_once" = 86 -"policyengine_uk/tests/test_child_and_adult_definitions_properties.py::test_frs_shaped_units_keep_the_under_20_presumption" = 85 -"policyengine_uk/tests/test_severe_disability_addition_properties.py::test_swapping_partners_leaves_a_couples_addition_unchanged" = 84 -"policyengine_uk/tests/test_child_and_adult_definitions_properties.py::test_any_benefit_unit_has_at_most_two_claimants_or_partners" = 84 +"policyengine_uk/tests/test_severe_disability_addition_properties.py::test_a_carer_benefit_never_increases_the_addition" = 86 +"policyengine_uk/tests/test_savings_allowance_properties.py::test_a_higher_pay_never_raises_the_allowance" = 86 +"policyengine_uk/tests/test_claimant_not_own_child_properties.py::test_claimants_are_never_their_units_children_and_others_keep_status" = 86 +"policyengine_uk/tests/test_severe_disability_addition_properties.py::test_swapping_partners_leaves_a_couples_addition_unchanged" = 85 +"policyengine_uk/tests/test_trading_loss_properties.py::test_means_tests_see_the_loss_only_through_tax" = 84 "policyengine_uk/tests/test_child_and_adult_definitions_properties.py::test_adding_a_child_without_identifying_parents_preserves_existing_members" = 84 +"policyengine_uk/tests/test_dfe_childcare_student_support_properties.py::test_care_to_learn_pays_each_child_once_up_to_the_per_child_cap" = 84 "policyengine_uk/tests/test_child_and_adult_definitions_properties.py::test_member_far_below_a_flagged_claimant_is_never_their_partner" = 84 -"policyengine_uk/tests/test_process_time_reforms.py::test_a_triple_lock_rate_set_by_reform_uprates_the_state_pension[via_scenario_before_data_load-statutory-outturn]" = 83 -"policyengine_uk/tests/test_dfe_childcare_student_support_properties.py::test_care_to_learn_pays_each_child_once_up_to_the_per_child_cap" = 83 "policyengine_uk/tests/test_process_time_reforms.py::test_a_triple_lock_rate_set_by_reform_uprates_the_state_pension[via_reform_dict-generated-interval]" = 83 +"policyengine_uk/tests/test_child_and_adult_definitions_properties.py::test_frs_shaped_units_keep_the_under_20_presumption" = 83 "policyengine_uk/tests/test_carers_allowance_pension_contribution_deduction_rate_properties.py::test_earnings_fall_by_contributions_times_the_change_in_share" = 83 +"policyengine_uk/tests/test_child_and_adult_definitions_properties.py::test_any_benefit_unit_has_at_most_two_claimants_or_partners" = 83 +"policyengine_uk/tests/test_household_head_agreement_properties.py::test_every_programme_reads_one_head" = 82 "policyengine_uk/tests/test_household_benefits_properties.py::test_contributory_jsa_raises_household_benefits_one_for_one" = 82 "policyengine_uk/tests/test_uc_property_capital.py::test_assessable_capital_never_falls_when_a_countable_asset_increases" = 82 "policyengine_uk/tests/test_process_time_reforms.py::test_a_triple_lock_rate_set_by_reform_uprates_the_state_pension[via_scenario_before_data_load-generated-bare-year]" = 82 -"policyengine_uk/tests/test_household_head_agreement_properties.py::test_every_programme_reads_one_head" = 82 +"policyengine_uk/tests/test_process_time_reforms.py::test_a_triple_lock_rate_set_by_reform_uprates_the_state_pension[via_scenario_before_data_load-statutory-outturn]" = 82 "policyengine_uk/tests/test_pension_credit_war_pension_properties.py::test_housing_benefit_and_ctr_disregard_war_pensions_on_every_route" = 81 -"policyengine_uk/tests/test_state_pension_age.py::test_status_matches_statute_for_every_birth_date[2017]" = 81 "policyengine_uk/tests/test_legacy_award_readers_properties.py::test_other_members_awards_never_change_the_readers" = 80 -"policyengine_uk/tests/test_process_time_reforms.py::test_earnings_growth_sets_the_next_aprils_triple_lock_by_its_rule" = 80 -"policyengine_uk/tests/test_uc_company_override_properties.py::test_invalid_holdings_share_a_finite_budget_and_preserve_savings" = 80 +"policyengine_uk/tests/test_property_transaction_tax_purchase_properties.py::test_additional_purchase_is_charged_on_its_own_price" = 80 "policyengine_uk/tests/test_state_pension_credit_qualifying_age.py::test_qualifying_age_matches_statute_for_every_birth_date[2044]" = 80 -"policyengine_uk/tests/test_housing_benefit_pension_age_cohorts.py::test_other_members_do_not_change_the_cohort" = 80 "policyengine_uk/tests/test_state_pension_credit_qualifying_age.py::test_qualifying_age_matches_statute_for_every_birth_date[2016]" = 80 -"policyengine_uk/tests/test_property_transaction_tax_purchase_properties.py::test_additional_purchase_is_charged_on_its_own_price" = 80 -"policyengine_uk/tests/test_state_pension_age.py::test_status_matches_statute_for_every_birth_date[2019]" = 80 -"policyengine_uk/tests/test_state_pension_age.py::test_status_matches_statute_for_every_birth_date[2015]" = 80 -"policyengine_uk/tests/test_state_pension_credit_qualifying_age.py::test_qualifying_age_matches_statute_for_every_birth_date[2017]" = 80 -"policyengine_uk/tests/test_state_pension_credit_qualifying_age.py::test_class_4_liability_matches_statute_for_every_birth_date[2018]" = 79 -"policyengine_uk/tests/test_property_transaction_tax_purchase_properties.py::test_stamp_duty_never_falls_as_the_additional_price_rises" = 79 -"policyengine_uk/tests/test_process_time_reforms.py::test_a_triple_lock_rate_set_by_reform_uprates_the_state_pension[via_scenario_before_data_load-generated-interval]" = 79 +"policyengine_uk/tests/test_property_transaction_tax_purchase_properties.py::test_stamp_duty_never_falls_as_the_additional_price_rises" = 80 +"policyengine_uk/tests/test_state_pension_credit_qualifying_age.py::test_qualifying_age_matches_statute_for_every_birth_date[2017]" = 79 +"policyengine_uk/tests/test_process_time_reforms.py::test_earnings_growth_sets_the_next_aprils_triple_lock_by_its_rule" = 79 "policyengine_uk/tests/test_housing_benefit_guarantee_credit_passport_properties.py::test_matches_the_old_formula_when_pension_credit_is_claimed" = 79 +"policyengine_uk/tests/test_state_pension_age.py::test_status_matches_statute_for_every_birth_date[2015]" = 79 +"policyengine_uk/tests/test_housing_benefit_pension_age_cohorts.py::test_other_members_do_not_change_the_cohort" = 79 "policyengine_uk/tests/test_process_time_reforms.py::test_a_triple_lock_rate_set_by_reform_uprates_the_state_pension[via_reform_dict-generated-bare-year]" = 79 "policyengine_uk/tests/test_dataframe_dataset.py::test_a_frame_builds_its_people_groups_and_values" = 79 -"policyengine_uk/tests/test_pension_credit_war_pension_properties.py::test_reassigning_payments_between_sources_and_partners" = 77 +"policyengine_uk/tests/test_pension_credit_war_pension_properties.py::test_reassigning_payments_between_sources_and_partners" = 78 +"policyengine_uk/tests/test_process_time_reforms.py::test_a_triple_lock_rate_set_by_reform_uprates_the_state_pension[via_scenario_before_data_load-generated-interval]" = 78 +"policyengine_uk/tests/test_uc_company_override_properties.py::test_invalid_holdings_share_a_finite_budget_and_preserve_savings" = 78 "policyengine_uk/tests/test_state_pension_credit_qualifying_age.py::test_qualifying_age_matches_statute_for_every_birth_date[2015]" = 77 -"policyengine_uk/tests/test_date_of_birth.py::test_household_situations_match_the_birth_year_rule" = 77 -"policyengine_uk/tests/test_council_tax_reduction_pension_credit_properties.py::test_awards_follow_the_pension_credit_routes" = 77 -"policyengine_uk/tests/test_legacy_carer_premium_properties.py::test_dependants_caring_never_changes_premium_or_is_eligibility" = 77 -"policyengine_uk/tests/test_esa_income_universal_credit_claim_properties.py::test_a_claim_is_the_couple_reporting_no_income_related_esa" = 76 -"policyengine_uk/tests/test_state_pension_age.py::test_status_matches_statute_for_every_birth_date[2044]" = 76 -"policyengine_uk/tests/test_disable_simulated_benefits.py::test_the_reform_splits_every_familys_reports_between_the_awards" = 75 +"policyengine_uk/tests/test_council_tax_reduction_pension_credit_properties.py::test_awards_follow_the_pension_credit_routes" = 76 +"policyengine_uk/tests/test_date_of_birth.py::test_household_situations_match_the_birth_year_rule" = 76 +"policyengine_uk/tests/test_legacy_carer_premium_properties.py::test_dependants_caring_never_changes_premium_or_is_eligibility" = 76 +"policyengine_uk/tests/test_disable_simulated_benefits.py::test_the_reform_splits_every_familys_reports_between_the_awards" = 76 "policyengine_uk/tests/test_severe_disability_afcs_properties.py::test_armed_forces_independence_payment_confers_severe_disability" = 75 -"policyengine_uk/tests/test_state_pension_age.py::test_status_matches_statute_for_every_birth_date[2025]" = 74 +"policyengine_uk/tests/test_state_pension_age.py::test_status_matches_statute_for_every_birth_date[2044]" = 75 +"policyengine_uk/tests/test_esa_income_universal_credit_claim_properties.py::test_a_claim_is_the_couple_reporting_no_income_related_esa" = 75 +"policyengine_uk/tests/test_state_pension_age.py::test_status_matches_statute_for_every_birth_date[2025]" = 75 +"policyengine_uk/tests/test_process_time_reforms.py::test_a_triple_lock_rate_set_by_reform_uprates_the_state_pension[via_parameter_changes-generated-interval]" = 75 "policyengine_uk/tests/test_legacy_carer_premium_properties.py::test_claimant_or_partner_caring_never_removes_is_eligibility" = 74 -"policyengine_uk/tests/test_pension_credit_reported_capital_properties.py::test_override_default_bounds_and_deemed_income" = 74 -"policyengine_uk/tests/test_process_time_reforms.py::test_a_triple_lock_rate_set_by_reform_uprates_the_state_pension[via_parameter_changes-statutory-outturn]" = 74 -"policyengine_uk/tests/test_process_time_reforms.py::test_a_triple_lock_rate_set_by_reform_uprates_the_state_pension[via_parameter_changes-generated-interval]" = 74 -"policyengine_uk/tests/test_pawhp_household_income_properties.py::test_switching_pawhp_off_lowers_household_income_by_pawhp" = 73 -"policyengine_uk/tests/test_rent_of_sharers_boarders_and_lodgers_properties.py::test_no_op_without_sharers_boarders_or_lodgers" = 73 -"policyengine_uk/tests/test_uc_claimant_elements_properties.py::test_elements_match_the_published_table_of_combinations" = 72 +"policyengine_uk/tests/test_pension_credit_reported_capital_properties.py::test_override_default_bounds_and_deemed_income" = 73 +"policyengine_uk/tests/test_process_time_reforms.py::test_a_triple_lock_rate_set_by_reform_uprates_the_state_pension[via_parameter_changes-statutory-outturn]" = 73 "policyengine_uk/tests/test_property_transaction_tax_purchase_properties.py::test_property_stocks_are_never_purchases" = 72 -"policyengine_uk/tests/test_uc_health_element_after_freeze.py::test_no_claimant_loses_from_one_year_to_the_next_with_non_negative_cpi" = 72 +"policyengine_uk/tests/test_rent_of_sharers_boarders_and_lodgers_properties.py::test_no_op_without_sharers_boarders_or_lodgers" = 72 +"policyengine_uk/tests/test_state_pension_age.py::test_status_matches_statute_for_every_birth_date[2017]" = 72 +"policyengine_uk/tests/test_pawhp_household_income_properties.py::test_switching_pawhp_off_lowers_household_income_by_pawhp" = 72 +"policyengine_uk/tests/test_process_time_reforms.py::test_a_triple_lock_rate_set_by_reform_uprates_the_state_pension[via_parameter_changes-generated-bare-year]" = 71 +"policyengine_uk/tests/test_state_pension_age.py::test_status_matches_statute_for_every_birth_date[2019]" = 71 "policyengine_uk/tests/test_labour_supply_response_baseline.py::test_basic_rate_rise_gives_responses_of_the_implied_sign" = 71 "policyengine_uk/tests/test_uc_claimant_income_properties.py::test_income_matches_regulations_22_and_72" = 71 +"policyengine_uk/tests/test_state_pension_credit_qualifying_age.py::test_class_4_liability_matches_statute_for_every_birth_date[2018]" = 71 +"policyengine_uk/tests/test_uc_claimant_elements_properties.py::test_elements_match_the_published_table_of_combinations" = 70 "policyengine_uk/tests/test_process_time_reforms.py::test_a_triple_lock_rate_set_by_reform_uprates_the_state_pension[via_reform_dict-statutory-outturn]" = 70 "policyengine_uk/tests/test_housing_benefit_lha_order_properties.py::test_bounds_closed_form_and_differential" = 70 -"policyengine_uk/tests/test_process_time_reforms.py::test_a_triple_lock_rate_set_by_reform_uprates_the_state_pension[via_parameter_changes-generated-bare-year]" = 70 +"policyengine_uk/tests/test_uc_health_element_after_freeze.py::test_no_claimant_loses_from_one_year_to_the_next_with_non_negative_cpi" = 70 "policyengine_uk/tests/test_uc_company_owner_properties.py::test_disregarded_holdings_count_for_no_benefit_unit" = 69 -"policyengine_uk/tests/test_uc_claimant_elements_properties.py::test_an_award_has_at_most_one_element_for_each_claimant" = 69 -"policyengine_uk/tests/test_fuel_duty_schedule.py::test_annual_override_applies_at_full_strength_and_only_to_its_year" = 69 -"policyengine_uk/tests/test_council_tax_reduction_child_benefit_properties.py::test_working_age_and_northern_ireland_keep_counting_child_benefit" = 69 -"policyengine_uk/tests/test_legacy_carer_premium_properties.py::test_caring_for_the_same_person_pays_at_most_one_premium" = 69 "policyengine_uk/tests/test_property_income_band_base_properties.py::test_moving_income_between_pay_and_property_leaves_savings_and_dividend_tax" = 69 -"policyengine_uk/tests/test_uc_statutory_pay_properties.py::test_a_dependants_statutory_pay_is_not_the_claimants_earned_income" = 68 -"policyengine_uk/tests/test_trading_loss_properties.py::test_zero_profit_trade_loss_cannot_raise_tax_or_reduce_programme_award[tax_credits-2024]" = 67 +"policyengine_uk/tests/test_legacy_carer_premium_properties.py::test_caring_for_the_same_person_pays_at_most_one_premium" = 68 +"policyengine_uk/tests/test_uc_claimant_elements_properties.py::test_an_award_has_at_most_one_element_for_each_claimant" = 68 +"policyengine_uk/tests/test_council_tax_reduction_child_benefit_properties.py::test_working_age_and_northern_ireland_keep_counting_child_benefit" = 68 +"policyengine_uk/tests/test_fuel_duty_schedule.py::test_annual_override_applies_at_full_strength_and_only_to_its_year" = 68 "policyengine_uk/tests/test_legacy_award_readers_properties.py::test_claimant_or_partner_awards_match_reference" = 66 -"policyengine_uk/tests/test_rent_of_sharers_boarders_and_lodgers_properties.py::test_lha_categories" = 66 "policyengine_uk/tests/test_council_tax_reduction_prescribed_benefits_properties.py::test_each_benefit_counts_pound_for_pound_in_every_scheme" = 66 -"policyengine_uk/tests/test_property_income_band_base_properties.py::test_more_property_income_never_lowers_savings_or_dividend_tax" = 66 -"policyengine_uk/tests/test_housing_benefit_income_related_benefit_passport_properties.py::test_passported_social_tenant_gets_the_rent_at_any_age" = 65 -"policyengine_uk/tests/test_carers_allowance_earnings_limit_properties.py::test_net_earnings_never_fall_as_pay_rises" = 65 -"policyengine_uk/tests/test_legacy_award_readers_properties.py::test_claimant_or_partner_awards_bounded_by_benefit_unit_awards" = 65 -"policyengine_uk/tests/test_carer_overlapping_benefits_properties.py::test_claiming_a_carer_benefit_reduced_to_nil_increases_pension_credit" = 65 +"policyengine_uk/tests/test_carers_allowance_earnings_limit_properties.py::test_net_earnings_never_fall_as_pay_rises" = 66 +"policyengine_uk/tests/test_uc_statutory_pay_properties.py::test_a_dependants_statutory_pay_is_not_the_claimants_earned_income" = 66 +"policyengine_uk/tests/test_rent_of_sharers_boarders_and_lodgers_properties.py::test_lha_categories" = 66 +"policyengine_uk/tests/test_trading_loss_properties.py::test_zero_profit_trade_loss_cannot_raise_tax_or_reduce_programme_award[tax_credits-2024]" = 65 "policyengine_uk/tests/test_legacy_award_readers_properties.py::test_other_members_awards_never_change_the_readers_for_young_singles" = 65 +"policyengine_uk/tests/test_carer_overlapping_benefits_properties.py::test_claiming_a_carer_benefit_reduced_to_nil_increases_pension_credit" = 65 +"policyengine_uk/tests/test_property_income_band_base_properties.py::test_more_property_income_never_lowers_savings_or_dividend_tax" = 65 +"policyengine_uk/tests/test_legacy_award_readers_properties.py::test_claimant_or_partner_awards_bounded_by_benefit_unit_awards" = 65 "policyengine_uk/tests/test_labour_supply_response_baseline.py::test_no_policy_change_gives_no_response" = 65 "policyengine_uk/tests/test_legacy_award_readers_properties.py::test_other_members_awards_never_change_the_readers_for_working_parents" = 64 -"policyengine_uk/tests/test_targeted_childcare_guarantee_credit_properties.py::test_eligibility_is_the_union_of_the_routes" = 64 "policyengine_uk/tests/test_housing_benefit_pension_age_cohorts.py::test_any_single_or_couple_follows_the_cohort_rule" = 64 -"policyengine_uk/tests/test_legacy_award_readers_properties.py::test_other_members_awards_never_change_the_readers_at_pension_age" = 64 +"policyengine_uk/tests/test_housing_benefit_income_related_benefit_passport_properties.py::test_passported_social_tenant_gets_the_rent_at_any_age" = 64 "policyengine_uk/tests/test_legacy_award_readers_properties.py::test_person_is_on_award_from_couple_or_own_report" = 63 -"policyengine_uk/tests/test_uc_standard_allowance_uplift.py::test_switching_rebalancing_off_removes_the_uplift_from_that_year" = 63 -"policyengine_uk/tests/test_trading_loss_properties.py::test_zero_profit_trade_loss_cannot_raise_tax_or_reduce_programme_award[housing_benefit-2024]" = 63 -"policyengine_uk/tests/test_uc_claimant_income_properties.py::test_at_most_two_assessed_claimants_drawn_from_flagged_claimants" = 61 -"policyengine_uk/tests/test_carers_allowance_earnings_limit_properties.py::test_bounds_and_differential" = 61 -"policyengine_uk/tests/test_rent_of_sharers_boarders_and_lodgers_properties.py::test_rent_is_monotone_in_household_rent" = 61 -"policyengine_uk/tests/test_targeted_childcare_guarantee_credit_properties.py::test_no_family_below_the_qualifying_age_qualifies_through_guarantee_credit" = 61 -"policyengine_uk/tests/test_uc_single_claim_properties.py::test_single_standard_allowance_at_the_claimants_own_age" = 61 +"policyengine_uk/tests/test_legacy_award_readers_properties.py::test_other_members_awards_never_change_the_readers_at_pension_age" = 63 +"policyengine_uk/tests/test_targeted_childcare_guarantee_credit_properties.py::test_eligibility_is_the_union_of_the_routes" = 62 +"policyengine_uk/tests/test_rent_of_sharers_boarders_and_lodgers_properties.py::test_rent_is_monotone_in_household_rent" = 62 +"policyengine_uk/tests/test_uc_standard_allowance_uplift.py::test_switching_rebalancing_off_removes_the_uplift_from_that_year" = 62 +"policyengine_uk/tests/test_carers_allowance_earnings_limit_properties.py::test_bounds_and_differential" = 62 "policyengine_uk/tests/test_carer_overlapping_benefits_properties.py::test_overlap_bounds_and_reference" = 61 -"policyengine_uk/tests/test_uc_minimum_income_floor_properties.py::test_top_up_never_takes_couple_above_couple_threshold" = 61 -"policyengine_uk/tests/test_winter_heating_payment_properties.py::test_non_dependants_never_change_anyone_elses_payment" = 61 -"policyengine_uk/tests/test_labour_supply_response_baseline.py::test_periods_give_the_same_response_in_any_order" = 60 +"policyengine_uk/tests/test_trading_loss_properties.py::test_zero_profit_trade_loss_cannot_raise_tax_or_reduce_programme_award[housing_benefit-2024]" = 61 +"policyengine_uk/tests/test_targeted_childcare_guarantee_credit_properties.py::test_no_family_below_the_qualifying_age_qualifies_through_guarantee_credit" = 60 "policyengine_uk/tests/test_salary_sacrifice_ni_measure_properties.py::test_measures_equal_the_difference_of_complete_liabilities[current law]" = 60 -"policyengine_uk/tests/test_reform_inputs_survive_reset.py::test_a_reform_names_exactly_the_variables_it_leaves_inputs_for" = 60 +"policyengine_uk/tests/test_labour_supply_response_baseline.py::test_periods_give_the_same_response_in_any_order" = 60 +"policyengine_uk/tests/test_uc_claimant_income_properties.py::test_at_most_two_assessed_claimants_drawn_from_flagged_claimants" = 60 +"policyengine_uk/tests/test_carer_overlapping_benefits_properties.py::test_carer_benefit_is_monotonic_in_state_pension" = 60 +"policyengine_uk/tests/test_winter_heating_payment_properties.py::test_non_dependants_never_change_anyone_elses_payment" = 60 +"policyengine_uk/tests/test_uc_single_claim_properties.py::test_single_standard_allowance_at_the_claimants_own_age" = 60 +"policyengine_uk/tests/test_trading_loss_properties.py::test_zero_profit_trade_loss_cannot_raise_tax_or_reduce_programme_award[universal_credit-2026]" = 59 +"policyengine_uk/tests/test_reform_inputs_survive_reset.py::test_a_reform_names_exactly_the_variables_it_leaves_inputs_for" = 59 +"policyengine_uk/tests/test_uc_minimum_income_floor_properties.py::test_top_up_never_takes_couple_above_couple_threshold" = 59 +"policyengine_uk/tests/test_pension_credit_carer_income_properties.py::test_pension_credit_and_housing_benefit_assess_the_same_carer_income" = 58 +"policyengine_uk/tests/test_hbai_negative_income_properties.py::test_every_household_has_a_decile_that_rises_with_income" = 58 +"policyengine_uk/tests/test_pension_credit_carer_income_properties.py::test_net_income_does_not_fall_where_guarantee_credit_ends_for_carers" = 58 +"policyengine_uk/tests/test_trading_loss_properties.py::test_income_tax_falls_with_the_loss_by_at_most_the_relief" = 58 +"policyengine_uk/tests/test_uc_legacy_closure_properties.py::test_closure_claims_and_the_end_of_legacy_awards" = 58 +"policyengine_uk/tests/test_uc_minimum_income_floor_properties.py::test_floor_holds_for_singles_and_couples" = 58 +"policyengine_uk/tests/test_council_tax_reduction_prescribed_benefits_properties.py::test_council_tax_reduction_and_pension_credit_assess_the_same_income" = 57 +"policyengine_uk/tests/test_reform_representations.py::test_reforms_do_not_leak_into_other_simulations" = 57 +"policyengine_uk/tests/test_ni_class_4_profits_properties.py::test_a_loss_entered_for_some_years_is_relieved_once" = 57 +"policyengine_uk/tests/test_winter_heating_payment_properties.py::test_payments_match_reference" = 57 +"policyengine_uk/tests/test_council_tax_reduction_carer_income_properties.py::test_council_tax_reduction_income_counts_the_carer_support_payment_component" = 56 +"policyengine_uk/tests/test_winter_heating_payment_properties.py::test_one_benefit_unit_receives_the_full_amount" = 56 +"policyengine_uk/tests/test_uc_claimant_income_properties.py::test_assessed_claimants_are_the_claimant_and_partner" = 56 +"policyengine_uk/tests/test_hbai_negative_income_properties.py::test_poverty_headcounts_are_unchanged_and_gaps_measured_from_the_reset" = 56 +"policyengine_uk/tests/test_uc_legacy_closure_properties.py::test_the_tax_credit_closure_ends_awards_paid_the_year_before" = 56 +"policyengine_uk/tests/test_uc_childcare_work_condition_properties.py::test_swapping_the_members_of_a_couple_does_not_change_the_result" = 56 +"policyengine_uk/tests/test_uc_property_capital.py::test_property_allocation_conserves_value_including_complete_override_shares" = 55 +"policyengine_uk/tests/test_uc_earned_income_before_work_allowance_properties.py::test_award_earned_income_is_before_work_allowance_less_the_allowance" = 55 +"policyengine_uk/tests/test_capital_share_components.py::test_one_unit_of_float32_rounding_above_a_power_of_two_keeps_the_aggregate" = 55 +"policyengine_uk/tests/test_housing_benefit_savings_credit_only_properties.py::test_net_income_does_not_fall_where_savings_credit_ends" = 54 +"policyengine_uk/tests/test_capital_share_components.py::test_float32_rounding_at_the_limit_keeps_eligibility" = 54 +"policyengine_uk/tests/test_housing_benefit_specified_accommodation_disregard_properties.py::test_differential_against_the_statutory_reference" = 54 +"policyengine_uk/tests/test_hbai_negative_income_properties.py::test_reset_income_and_its_measures" = 54 +"policyengine_uk/tests/test_benunit_reported_capital_properties.py::test_programme_variable_set_directly_wins_for_that_programme" = 53 +"policyengine_uk/tests/test_uc_childcare_work_condition_properties.py::test_no_exception_meets_the_condition_without_limb_a" = 53 +"policyengine_uk/tests/test_uc_minimum_income_floor_properties.py::test_matches_closed_form_of_regulation_62" = 53 +"policyengine_uk/tests/test_uc_statutory_pay_properties.py::test_award_never_rises_with_a_claimants_statutory_pay" = 52 +"policyengine_uk/tests/test_housing_benefit_savings_credit_only_properties.py::test_net_income_rises_with_private_pension_on_savings_credit_only" = 52 +"policyengine_uk/tests/test_uc_childcare_work_condition_properties.py::test_condition_matches_the_reference_for_every_combination_of_routes" = 52 +"policyengine_uk/tests/test_uc_earned_income_before_work_allowance_properties.py::test_childcare_criterion_implies_the_old_after_allowance_test" = 51 +"policyengine_uk/tests/test_severe_disability_premium_properties.py::test_counted_non_dependant_removes_premium" = 51 +"policyengine_uk/tests/test_pension_age_severe_disability_premium_properties.py::test_pension_age_applicable_amounts_cover_the_minimum_guarantee" = 51 +"policyengine_uk/tests/test_council_tax_reduction_prescribed_benefits_properties.py::test_dependants_benefits_never_count" = 51 +"policyengine_uk/tests/test_marriage_allowance_cps_switch.py::test_any_statutory_rate_keeps_the_statutory_conditions_and_cap" = 51 +"policyengine_uk/tests/test_uc_work_related_groups_properties.py::test_one_responsible_carer_where_there_is_a_child" = 51 +"policyengine_uk/tests/test_housing_benefit_specified_accommodation_disregard_properties.py::test_working_age_earner_in_the_accommodation_has_the_statutory_amount" = 51 +"policyengine_uk/tests/test_uc_income_from_capital_properties.py::test_capital_yield_is_counted_once_as_tariff_income" = 51 +"policyengine_uk/tests/test_council_tax_reduction_pensioner_earnings_disregard_properties.py::test_disregard_lowers_income_by_no_more_than_earnings_and_never_cuts_ctr" = 51 +"policyengine_uk/tests/test_uc_company_owner_properties.py::test_universal_credit_monotone_in_company_facts" = 51 +"policyengine_uk/tests/test_carers_allowance_earnings_limit_properties.py::test_unearned_income_is_not_earnings" = 50 +"policyengine_uk/tests/test_uc_single_claim_properties.py::test_a_partner_under_18_outside_regulation_8_cannot_claim_jointly" = 50 +"policyengine_uk/tests/test_uc_work_related_groups_properties.py::test_floor_applies_only_to_the_all_requirements_group" = 50 +"policyengine_uk/tests/test_carer_overlapping_benefits_properties.py::test_pension_credit_counts_the_payable_carer_benefit" = 50 +"policyengine_uk/tests/test_savings_credit_only_receipt_properties.py::test_fix_changes_nothing_in_the_unreformed_model" = 50 +"policyengine_uk/tests/test_pension_age_severe_disability_premium_properties.py::test_premiums_follow_the_pension_age_and_working_age_schedules" = 50 +"policyengine_uk/tests/test_severe_disability_premium_properties.py::test_carer_benefit_never_increases_premium" = 50 +"policyengine_uk/tests/test_state_pension_credit_qualifying_age.py::test_qualifying_age_matches_statute_for_every_birth_date[2027]" = 50 +"policyengine_uk/tests/test_housing_benefit_savings_credit_only_properties.py::test_income_follows_the_route_for_the_award" = 50 +"policyengine_uk/tests/test_housing_benefit_specified_accommodation_disregard_properties.py::test_income_support_disregards_all_earnings" = 49 +"policyengine_uk/tests/test_pension_age_severe_disability_premium_properties.py::test_net_income_does_not_fall_where_guarantee_credit_ends" = 49 +"policyengine_uk/tests/microsimulation/test_reform_impacts.py::test_reform_fiscal_impacts[Raise personal allowance by ~800GBP/year]" = 49 +"policyengine_uk/tests/microsimulation/test_reform_impacts.py::test_reform_fiscal_impacts[Raise basic rate by 1pp]" = 49 +"policyengine_uk/tests/test_scenario_sum_timing.py::test_a_simulation_runs_each_part_once_at_its_own_time" = 48 +"policyengine_uk/tests/test_uc_statutory_pay_properties.py::test_statutory_pay_counts_as_wages_and_earned_income_adds_up" = 48 +"policyengine_uk/tests/test_uc_work_related_groups_properties.py::test_thresholds_follow_the_group_and_expected_hours" = 48 +"policyengine_uk/tests/test_salary_sacrifice_needs_pay_properties.py::test_only_people_with_pay_have_a_salary_sacrifice" = 48 +"policyengine_uk/tests/test_severe_disability_premium_properties.py::test_matches_pension_credit_severe_disability_addition" = 48 +"policyengine_uk/tests/test_housing_benefit_lha_order_properties.py::test_monotonicity" = 48 +"policyengine_uk/tests/test_uc_minimum_income_floor_properties.py::test_floor_never_lowers_earned_income" = 48 +"policyengine_uk/tests/test_council_tax_reduction_pension_credit_properties.py::test_savings_credit_only_awards_use_the_pension_credit_assessment" = 48 +"policyengine_uk/tests/test_uc_statutory_pay_properties.py::test_uc_does_not_increase_as_statutory_paternity_pay_rises" = 48 +"policyengine_uk/tests/test_salary_sacrifice_ni_only.py::test_explicit_actual_return_matches_actual_pay_and_member_inputs[personal_allowance]" = 48 +"policyengine_uk/tests/test_income_support_eligibility_properties.py::test_more_work_or_jsa_never_makes_a_family_eligible" = 48 +"policyengine_uk/tests/test_housing_benefit_earnings_disregard_properties.py::test_disregard_is_non_decreasing_in_earnings" = 47 +"policyengine_uk/tests/test_benefit_cap_uc_and_hb_properties.py::test_a_family_with_both_awards_is_capped_once_through_universal_credit" = 47 +"policyengine_uk/tests/test_legacy_award_readers_properties.py::test_other_members_esa_never_changes_non_dependant_exemption" = 47 +"policyengine_uk/tests/test_labour_supply_response_baseline.py::test_zero_elasticities_give_no_response" = 47 +"policyengine_uk/tests/test_uc_childcare_work_condition_properties.py::test_childcare_element_needs_the_work_condition" = 47 +"policyengine_uk/tests/test_variable_module_release.py::test_dead_systems_modules_are_released_while_a_test_runs" = 47 +"policyengine_uk/tests/test_housing_benefit_pension_age_cohorts.py::test_council_tax_reduction_splits_only_in_england" = 47 +"policyengine_uk/tests/test_capital_gains_tax_components.py::TestEqualisationReforms::test_main_rate_reform_leaves_the_other_schedules_at_current_law" = 47 +"policyengine_uk/tests/microsimulation/test_reform_impacts.py::test_reform_fiscal_impacts[Raise Class 1 main employee NICs rate to 10%]" = 47 +"policyengine_uk/tests/test_uc_property_capital.py::test_financial_allocation_conserves_pool_with_reports_and_complete_overrides" = 46 +"policyengine_uk/tests/test_housing_benefit_specified_accommodation_disregard_properties.py::test_no_earner_has_no_para_18_amount" = 46 +"policyengine_uk/tests/test_housing_benefit_earnings_disregard_properties.py::test_disregard_lowers_applicable_income_by_no_more_than_earnings" = 46 +"policyengine_uk/tests/test_council_tax_reduction_pensioner_earnings_disregard_properties.py::test_disregard_is_non_decreasing_in_earnings" = 46 +"policyengine_uk/tests/test_housing_benefit_earnings_disregard_properties.py::test_pension_age_and_working_age_schedules_agree" = 46 +"policyengine_uk/tests/test_pension_annual_allowance_properties.py::test_gift_aid_never_increases_tax_with_stable_ras_eligibility" = 45 +"policyengine_uk/tests/test_housing_benefit_universal_credit_passport_properties.py::test_universal_credit_and_income_support_limbs_agree" = 45 +"policyengine_uk/tests/test_housing_benefit_universal_credit_passport_properties.py::test_universal_credit_never_lowers_pre_cap_housing_benefit" = 45 +"policyengine_uk/tests/test_pension_credit_war_pension_properties.py::test_pension_credit_and_housing_benefit_differ_only_by_war_pensions" = 45 +"policyengine_uk/tests/test_gov_spending_properties.py::test_a_pound_more_of_a_payment_is_a_pound_of_government_spending" = 45 +"policyengine_uk/tests/test_housing_benefit_pension_age_properties.py::test_dataset_take_up_stays_anchored_to_reported_claims" = 45 +"policyengine_uk/tests/test_trading_loss_properties.py::test_household_income_moves_only_through_its_channels" = 45 +"policyengine_uk/tests/test_pension_credit_prescribed_benefits_properties.py::test_net_income_does_not_fall_where_guarantee_credit_ends" = 45 +"policyengine_uk/tests/test_pension_credit_prescribed_benefits_properties.py::test_reg_9_sources_change_savings_credit_income_only_through_tax" = 45 +"policyengine_uk/tests/test_pension_credit_prescribed_benefits_properties.py::test_guarantee_credit_falls_pound_for_pound_with_each_prescribed_benefit" = 44 +"policyengine_uk/tests/test_salary_sacrifice_ni_only.py::test_explicit_actual_return_matches_actual_pay_and_member_inputs[pension_annual_allowance_threshold_income]" = 44 +"policyengine_uk/tests/test_pension_credit_statutory_pay_properties.py::test_pension_credit_and_housing_benefit_assess_the_same_statutory_pay" = 44 +"policyengine_uk/tests/test_pension_credit_statutory_pay_properties.py::test_guarantee_credit_never_rises_with_statutory_pay" = 44 +"policyengine_uk/tests/test_housing_benefit_lha_order_properties.py::test_end_to_end_pension_age_housing_benefit" = 44 +"policyengine_uk/tests/test_pension_credit_prescribed_benefits_properties.py::test_pension_credit_and_housing_benefit_assess_the_same_prescribed_benefits" = 44 +"policyengine_uk/tests/test_council_tax_reduction_carer_income_properties.py::test_council_tax_reduction_income_on_the_pension_credit_routes" = 44 +"policyengine_uk/tests/test_pension_credit_war_pension_properties.py::test_guarantee_credit_does_not_rise_with_an_afcs_payment" = 44 +"policyengine_uk/tests/test_ni_class_2.py::test_ni_class_2_properties" = 44 +"policyengine_uk/tests/test_statutory_paternity_pay_income_tax_properties.py::test_statutory_paternity_pay_is_treated_as_statutory_sick_pay" = 44 +"policyengine_uk/tests/microsimulation/test_salary_sacrifice_cap_reform.py::test_salary_sacrifice_cap_revenue_impact" = 44 +"policyengine_uk/tests/microsimulation/test_state_pension_reform.py::test_relative_state_pension_reform_affects_budget" = 44 +"policyengine_uk/tests/test_uc_childcare_work_condition_properties.py::test_condition_matches_the_regulation_32_reference" = 43 +"policyengine_uk/tests/test_housing_benefit_specified_accommodation_disregard_properties.py::test_bounds" = 43 +"policyengine_uk/tests/test_housing_benefit_universal_credit_passport_properties.py::test_universal_credit_passport_ignores_income_and_capital" = 43 +"policyengine_uk/tests/test_housing_benefit_specified_accommodation_disregard_properties.py::test_pension_age_has_no_para_18_amount" = 43 +"policyengine_uk/tests/test_council_tax_reduction_prescribed_benefits_properties.py::test_war_pensions_never_count" = 43 +"policyengine_uk/tests/test_salary_sacrifice_ni_only.py::test_explicit_actual_return_is_query_order_independent" = 43 +"policyengine_uk/tests/test_salary_sacrifice_ni_only.py::test_explicit_actual_return_matches_actual_pay_and_member_inputs[employment_income]" = 43 +"policyengine_uk/tests/test_household_benefits_properties.py::test_household_benefits_sums_each_benefit_once" = 43 +"policyengine_uk/tests/test_pension_annual_allowance_taper.py::test_threshold_income_gate_preserves_standard_allowance" = 43 +"policyengine_uk/tests/test_pension_annual_allowance_properties.py::test_relief_is_the_section_190_limit" = 43 +"policyengine_uk/tests/test_esa_income_universal_credit_claim_properties.py::test_a_universal_credit_claim_ends_the_couples_income_related_esa" = 43 +"policyengine_uk/tests/test_pension_annual_allowance_properties.py::test_charge_matches_band_by_band_reference" = 43 +"policyengine_uk/tests/test_severe_disability_premium_properties.py::test_premium_matches_independent_oracle_and_range" = 43 +"policyengine_uk/tests/test_uc_company_owner_properties.py::test_property_company_gives_no_earnings" = 43 +"policyengine_uk/tests/test_scenario_baseline_parameters.py::test_before_load_spending_scenario_constructs_on_the_dataset" = 43 +"policyengine_uk/tests/test_uc_disabled_child_addition_properties.py::test_exact_award_categories_and_blindness_select_one_tier" = 42 +"policyengine_uk/tests/test_lha_published_rates.py::test_northern_ireland_maxima_and_minimum_change_only_northern_ireland" = 42 +"policyengine_uk/tests/aggregate_impact/test_aggregate_impact_certified.py::test_head_totals_agree_with_the_model_weighted_sums" = 42 +"policyengine_uk/tests/microsimulation/test_reform_impacts.py::test_reform_fiscal_impacts[Raise higher rate by 1pp]" = 42 +"policyengine_uk/tests/test_salary_sacrifice_ni_only.py::test_explicit_actual_return_matches_actual_pay_and_member_inputs[employee_pension_contributions]" = 42 +"policyengine_uk/tests/test_dataframe_dataset.py::test_an_exported_frame_gives_the_results_of_its_dataset[default export]" = 42 +"policyengine_uk/tests/test_ni_class_4_profits_properties.py::test_losses_carry_forward_over_many_years" = 42 +"policyengine_uk/tests/test_gov_spending_properties.py::test_government_spending_counts_every_benefit_government_pays" = 42 +"policyengine_uk/tests/test_uc_health_element_freeze.py::test_any_cpi_forecast_leaves_the_frozen_years_alone" = 41 +"policyengine_uk/tests/test_housing_benefit_income_related_benefit_passport_properties.py::test_passported_entitlement_ignores_income_and_capital" = 41 +"policyengine_uk/tests/test_statutory_paternity_pay_income_tax_properties.py::test_income_tax_never_falls_as_statutory_paternity_pay_rises" = 41 +"policyengine_uk/tests/test_uprating_inputs_reach_data.py::test_the_fingerprint_changes_with_any_read_input" = 41 +"policyengine_uk/tests/test_uc_company_owner_properties.py::test_household_capital_is_allocated_and_conserved_across_benefit_units" = 41 +"policyengine_uk/tests/test_salary_sacrifice_ni_only.py::test_explicit_actual_return_matches_actual_pay_and_member_inputs[pension_contributions_relief]" = 41 +"policyengine_uk/tests/test_council_tax_reduction_carer_income_properties.py::test_council_tax_reduction_and_housing_benefit_assess_the_same_carer_income" = 40 +"policyengine_uk/tests/test_ni_class_4_statute.py::test_class_4_matches_statute_property" = 40 +"policyengine_uk/tests/test_housing_benefit_pension_age_properties.py::test_new_claims_follow_the_pension_age_route" = 40 +"policyengine_uk/tests/test_severe_disability_premium_properties.py::test_qualifying_benefit_or_blindness_never_reduces_premium" = 40 +"policyengine_uk/tests/test_from_reform_modifier.py::test_sequence_modifier_matches_apply_with_repeated_and_reordered_writes[False]" = 40 +"policyengine_uk/tests/code_health/test_ci_test_shards.py::test_real_pytest_shards_pass_the_check_only_when_allowed[xdist1]" = 40 +"policyengine_uk/tests/test_pension_annual_allowance_taper.py::test_allowance_is_nonincreasing_in_adjusted_income_above_gate" = 40 +"policyengine_uk/tests/test_housing_benefit_income_related_benefit_passport_properties.py::test_receipt_never_lowers_pre_cap_housing_benefit" = 39 +"policyengine_uk/tests/test_process_time_reforms.py::test_every_key_for_a_year_of_growth_gives_the_same_parameters[via_parameter_changes]" = 39 +"policyengine_uk/tests/test_property_transaction_tax_purchase_properties.py::test_main_residence_flag_never_creates_an_additional_purchase" = 39 +"policyengine_uk/tests/test_pension_credit_war_pension_properties.py::test_counted_war_pension_income_bounds_and_closed_form" = 39 +"policyengine_uk/tests/test_housing_benefit_guarantee_credit_passport_properties.py::test_receipt_means_a_paid_guarantee_credit_and_passports" = 39 +"policyengine_uk/tests/test_labour_supply_response_baseline.py::test_each_response_is_measured_before_the_other" = 39 +"policyengine_uk/tests/test_pension_annual_allowance_taper.py::test_allowance_bounds_and_statutory_two_gate_reference" = 39 +"policyengine_uk/tests/test_trading_loss_properties.py::test_relief_taxes_like_income_cut_in_section_25_order" = 38 +"policyengine_uk/tests/test_salary_sacrifice_needs_pay_properties.py::test_ni_excess_never_falls_with_sacrifice_or_pay" = 38 +"policyengine_uk/tests/test_statutory_pension_edges.py::test_trade_losses_do_not_leak_nics_reclassification_into_aa[DC-2030]" = 38 +"policyengine_uk/tests/test_severe_disability_afcs_properties.py::test_severe_disability_matches_the_tax_credit_condition" = 38 +"policyengine_uk/tests/test_state_pension_components.py::test_components_add_up_whatever_ages_the_period_carries" = 38 +"policyengine_uk/tests/test_statutory_pension_edges.py::test_trade_losses_do_not_leak_nics_reclassification_into_aa[DB-2029]" = 38 +"policyengine_uk/tests/test_process_time_reforms.py::test_every_key_for_a_year_of_growth_gives_the_same_parameters[via_reform_dict]" = 38 +"policyengine_uk/tests/test_state_pension_components.py::test_components_add_up_to_uprated_reported_amount" = 38 +"policyengine_uk/tests/test_statutory_pension_edges.py::test_trade_losses_do_not_leak_nics_reclassification_into_aa[DC-2029]" = 38 +"policyengine_uk/tests/test_uc_childcare_work_condition_properties.py::test_a_couple_both_in_paid_work_always_meets_the_condition" = 37 +"policyengine_uk/tests/test_state_pension_components.py::test_add_on_follows_september_cpi_and_nothing_else_changes" = 37 +"policyengine_uk/tests/test_property_income_band_base_properties.py::test_non_savings_taxable_income_is_the_rest_after_allowances" = 37 +"policyengine_uk/tests/aggregate_impact/test_aggregate_impact_certified.py::test_spending_never_rises_by_more_than_is_added_except_known_defects" = 37 +"policyengine_uk/tests/test_rent_of_sharers_boarders_and_lodgers_properties.py::test_non_dependants" = 37 +"policyengine_uk/tests/test_statutory_paternity_pay_income_tax_properties.py::test_statutory_paternity_pay_is_taxed_as_wages" = 36 +"policyengine_uk/tests/test_trading_loss_properties.py::test_class_4_profits_net_of_the_loss_balance" = 36 +"policyengine_uk/tests/test_dataframe_dataset.py::test_an_exported_frame_gives_the_results_of_its_dataset[export of every stored value]" = 36 +"policyengine_uk/tests/microsimulation/test_salary_sacrifice_cap_reform.py::test_decile_impact_negative_for_higher_earners" = 36 +"policyengine_uk/tests/test_dated_reform_routes.py::test_a_fresh_process_agrees_with_a_warm_one" = 36 +"policyengine_uk/tests/test_statutory_pension_edges.py::test_trade_losses_do_not_leak_nics_reclassification_into_aa[DB-2030]" = 35 +"policyengine_uk/tests/test_trading_loss_properties.py::test_relief_is_the_loss_within_net_income_and_the_cap" = 35 +"policyengine_uk/tests/test_disable_simulated_benefits_carers.py::test_reported_care_is_conserved" = 34 +"policyengine_uk/tests/test_trading_loss_properties.py::test_tax_credit_income_falls_by_the_claimants_losses" = 34 +"policyengine_uk/tests/test_savings_credit_only_receipt_properties.py::test_known_families_detect_main" = 34 +"policyengine_uk/tests/test_uc_health_element_after_freeze.py::test_the_protected_amount_never_falls_for_any_cpi_path" = 34 +"policyengine_uk/tests/test_rent_of_sharers_boarders_and_lodgers_properties.py::test_conservation_bounds_and_tenure" = 34 +"policyengine_uk/tests/test_statutory_paternity_pay_income_tax_properties.py::test_statutory_pay_adds_up_to_taxable_employment_income" = 34 +"policyengine_uk/tests/test_disable_simulated_benefits_carers.py::test_reported_care_follows_each_years_country" = 34 +"policyengine_uk/tests/test_lha_published_rates.py::test_northern_ireland_keeps_its_minimum_when_great_britain_ends_its_own" = 34 +"policyengine_uk/tests/test_benefit_cap_specified_benefits_properties.py::test_an_element_is_entered_exactly_when_its_last_store_was_supplied" = 33 +"policyengine_uk/tests/test_data_built_imputations.py::test_extracted_household_keeps_its_imputations" = 33 +"policyengine_uk/tests/test_council_tax_reduction_child_benefit_properties.py::test_pensioner_ctr_is_invariant_to_actual_child_benefit_claim" = 33 +"policyengine_uk/tests/test_child_benefit_charge_rounding_properties.py::test_simulated_charge_matches_the_statute" = 33 +"policyengine_uk/tests/code_health/test_cached_arrays_not_written_in_place.py::test_branching_runs_with_read_only_cache[labour_supply_responses]" = 33 +"policyengine_uk/tests/microsimulation/test_salary_sacrifice_cap_reform.py::test_income_tax_impact" = 33 +"policyengine_uk/tests/test_disable_simulated_benefits_winter_heating.py::test_reported_winter_heating_is_conserved" = 33 +"policyengine_uk/tests/microsimulation/test_reform_impacts.py::test_reform_fiscal_impacts[Reduce Universal Credit taper rate to 20%]" = 33 +"policyengine_uk/tests/test_capital_gains_tax_components.py::TestEqualisationReforms::test_setting_every_schedule_taxes_every_gain_alike" = 32 +"policyengine_uk/tests/test_triple_lock_statutory_inputs.py::test_policy_levers_apply_from_the_april_of_the_year_they_name" = 32 +"policyengine_uk/tests/test_disable_simulated_benefits_winter_heating.py::test_reported_winter_heating_follows_each_years_country" = 32 +"policyengine_uk/tests/test_uc_health_element_freeze.py::test_lifting_the_freeze_reaches_a_simulated_new_claimant" = 31 +"policyengine_uk/tests/microsimulation/test_reform_impacts.py::test_reform_fiscal_impacts[Raise child benefit by 25GBP/week per additional child]" = 31 +"policyengine_uk/tests/test_state_pension_age.py::test_extracted_household_keeps_its_birthday" = 30 +"policyengine_uk/tests/test_benefit_cap_specified_benefits_properties.py::test_an_element_a_reform_gives_is_decided_by_its_value[uc_carer_element]" = 30 +"policyengine_uk/tests/microsimulation/test_reform_impacts.py::test_reform_fiscal_impacts[Raise VAT standard rate by 2pp]" = 30 +"policyengine_uk/tests/test_benefit_cap_specified_benefits_properties.py::test_an_element_a_reform_gives_is_decided_by_its_value[uc_LCWRA_element]" = 29 +"policyengine_uk/tests/microsimulation/test_reform_impacts.py::test_reform_fiscal_impacts[Raise additional rate by 3pp]" = 28 +"policyengine_uk/tests/test_dated_reform_routes.py::test_a_scenario_keeps_its_modifiers_parameters_and_its_parameter_changes[False]" = 28 +"policyengine_uk/tests/test_targeted_childcare_guarantee_credit_properties.py::test_known_families_detect_the_earlier_routes" = 27 +"policyengine_uk/tests/test_data_built_imputations.py::test_imputations_do_not_depend_on_total_weight" = 27 +"policyengine_uk/tests/test_bonus_sacrifice_properties.py::test_bonus_sacrifice_scores_like_salary_sacrifice[split-2030]" = 27 +"policyengine_uk/tests/test_behavioral_responses.py::TestBehavioralResponses::test_automatic_baseline_matches_explicit_baseline" = 27 +"policyengine_uk/tests/test_bonus_sacrifice_properties.py::test_bonus_sacrifice_scores_like_salary_sacrifice[split-2029]" = 27 +"policyengine_uk/tests/test_lha_freeze.py::test_great_britain_lha_reforms_leave_northern_ireland_rates_unchanged" = 26 +"policyengine_uk/tests/test_bonus_sacrifice_properties.py::test_bonus_sacrifice_scores_like_salary_sacrifice[split-2028]" = 26 +"policyengine_uk/tests/test_legacy_carer_premium_properties.py::test_scottish_caring_hours_follow_carer_support_payment" = 26 +"policyengine_uk/tests/test_weighted_incidence.py::test_zero_weight_holder_uses_existing_fallback[shareholding-expected0]" = 26 +"policyengine_uk/tests/test_dated_reform_routes.py::test_a_dict_reform_reaches_the_uc_rebalancing_inputs" = 26 +"policyengine_uk/tests/test_legacy_award_readers_properties.py::test_claimant_and_partner_awards_passport_housing_benefit_income" = 25 +"policyengine_uk/tests/test_dataframe_dataset.py::test_spending_on_a_small_frame_goes_to_the_deciles_it_holds[nhs]" = 25 +"policyengine_uk/tests/test_marriage_allowance_cps_switch.py::test_the_reform_switches_on_from_its_own_parameters_only" = 25 +"policyengine_uk/tests/test_measurement_branches.py::test_a_measurement_branch_drops_what_its_simulation_calculated" = 25 +"policyengine_uk/tests/test_legacy_award_readers_properties.py::test_claimant_and_partner_awards_count_in_full_as_their_ctr_income" = 25 +"policyengine_uk/tests/test_bus_fare_reforms.py::test_a_three_pound_cap_binds_and_cap_reforms_follow_the_table" = 25 +"policyengine_uk/tests/test_disable_simulated_benefits_carers.py::test_a_carer_who_moves_is_paid_under_each_years_scheme[scenario-SCOTLAND-LONDON]" = 25 +"policyengine_uk/tests/test_carer_support_payment.py::test_csp_earnings_limit_is_independent_of_carers_allowance_limit" = 25 +"policyengine_uk/tests/test_lha_freeze.py::test_northern_ireland_lha_unfreeze_changes_only_northern_ireland_rates" = 25 +"policyengine_uk/tests/test_bonus_sacrifice_properties.py::test_cap_charges_nics_on_bonus_sacrifice_above_threshold[2029]" = 25 +"policyengine_uk/tests/test_from_reform_modifier.py::test_modifier_matches_scenario_apply_on_built_parameters" = 24 +"policyengine_uk/tests/test_legacy_award_readers_properties.py::test_an_outside_adults_work_keeps_their_non_dependant_deduction" = 24 +"policyengine_uk/tests/test_savings_credit_only_receipt_properties.py::test_stopping_pension_credit_payments_ends_savings_credit_only_receipt" = 24 +"policyengine_uk/tests/microsimulation/test_salary_sacrifice_cap_reform.py::test_ni_increases_with_reform" = 24 +"policyengine_uk/tests/test_dataframe_dataset.py::test_a_reform_on_an_exported_frame_gives_the_results_of_its_dataset" = 24 +"policyengine_uk/tests/test_capital_gains_responses.py::test_realisations_fall_when_rates_rise" = 24 +"policyengine_uk/tests/test_lha_freeze.py::test_great_britain_lha_maxima_and_minimum_leave_northern_ireland_unchanged" = 24 +"policyengine_uk/tests/test_capital_gains_response_default.py::test_the_default_matches_on_a_dataset" = 24 +"policyengine_uk/tests/test_dated_reform_routes.py::test_a_change_replacing_the_files_last_value_restores_their_years_after_it" = 24 +"policyengine_uk/tests/test_labour_supply_response_baseline.py::test_response_does_not_depend_on_calculating_the_baseline_first" = 23 +"policyengine_uk/tests/test_housing_benefit_earnings_disregard_properties.py::test_income_support_disregards_all_earnings_at_any_age" = 23 +"policyengine_uk/tests/test_housing_benefit_universal_credit_passport_properties.py::test_definition_passport_and_maximum" = 23 +"policyengine_uk/tests/test_scenario_sum_timing.py::test_before_load_parameter_changes_in_a_sum_reach_the_data" = 23 +"policyengine_uk/tests/test_pension_credit_income_losses.py::test_a_property_loss_counts_as_nil" = 23 +"policyengine_uk/tests/test_disable_simulated_benefits_carers.py::test_household_benefits_include_the_report_once" = 23 +"policyengine_uk/tests/test_dated_reform_routes.py::test_a_scenario_keeps_its_modifiers_parameters_and_its_parameter_changes[True]" = 23 +"policyengine_uk/tests/test_capital_gains_responses.py::test_response_does_not_depend_on_calculating_the_baseline_first" = 23 +"policyengine_uk/tests/code_health/test_labour_supply_parameters_are_read.py::test_recorder_does_not_count_a_parameter_nothing_reads" = 23 +"policyengine_uk/tests/test_dated_reform_routes.py::test_prior_law_after_a_bounded_change_follows_the_reforms_other_changes" = 23 +"policyengine_uk/tests/test_pension_credit_income_losses.py::test_pension_credit_is_never_higher_than_with_no_property_income" = 22 +"policyengine_uk/tests/test_triple_lock_statutory_inputs.py::test_without_the_triple_lock_the_pension_follows_earnings" = 22 +"policyengine_uk/tests/test_capital_gains_response_default.py::test_an_mtr_elasticity_alone_applies_with_one_warning" = 22 +"policyengine_uk/tests/test_council_tax_reduction_pensioner_earnings_disregard_properties.py::test_housing_benefit_disregard_is_the_statutory_weekly_sum_in_every_year" = 22 +"policyengine_uk/tests/test_council_tax_reduction_pensioner_earnings_disregard_properties.py::test_differential_against_the_housing_benefit_pension_age_disregard" = 22 +"policyengine_uk/tests/test_capital_gains_response_default.py::test_the_default_response_is_stable_across_recalculation_and_order" = 22 +"policyengine_uk/tests/test_disable_simulated_benefits_winter_heating.py::test_household_benefits_include_the_report_once" = 22 +"policyengine_uk/tests/test_two_child_limit_age_exemption_properties.py::test_age_exemption_lifts_only_the_two_child_limit" = 22 +"policyengine_uk/tests/test_dated_reform_routes.py::test_a_modifier_that_reprocesses_the_parameters_keeps_the_reform[reindex_benefit_cap]" = 22 +"policyengine_uk/tests/test_disable_simulated_benefits_winter_heating.py::test_a_household_that_moves_is_paid_under_each_years_scheme[SCOTLAND-LONDON]" = 22 +"policyengine_uk/tests/code_health/test_labour_supply_parameters_are_read.py::test_every_labour_supply_parameter_is_read[gov.simulation.labour_supply_responses]" = 22 +"policyengine_uk/tests/test_council_tax_reduction_pensioner_earnings_disregard_properties.py::test_disregard_is_bounded_and_only_for_pension_age_families_in_great_britain" = 22 +"policyengine_uk/tests/test_disable_simulated_benefits_carers.py::test_a_carer_who_moves_is_paid_under_each_years_scheme[scenario-LONDON-SCOTLAND]" = 22 +"policyengine_uk/tests/test_disable_simulated_benefits_carers.py::test_a_carer_who_moves_is_paid_under_each_years_scheme[reform-SCOTLAND-LONDON]" = 22 +"policyengine_uk/tests/code_health/test_cached_arrays_not_written_in_place.py::test_branching_runs_with_read_only_cache[capital_gains_default_response]" = 22 +"policyengine_uk/tests/test_reform_representations.py::test_parametric_reform_representations_match_the_dict[Reform.from_dict]" = 22 +"policyengine_uk/tests/test_pension_credit_income_losses.py::test_a_self_employment_loss_counts_as_nil" = 22 +"policyengine_uk/tests/test_reform_representations.py::test_microsimulation_accepts_reform_classes[Reform.from_dict]" = 21 +"policyengine_uk/tests/test_disable_simulated_benefits_carers.py::test_a_carer_who_moves_is_paid_under_each_years_scheme[reform-LONDON-SCOTLAND]" = 21 +"policyengine_uk/tests/test_housing_benefit_earnings_disregard_properties.py::test_differential_against_the_old_flat_formula" = 21 +"policyengine_uk/tests/test_marginal_rates_hold_behavioural_responses.py::test_marginal_tax_rate_holds_the_capital_gains_response[22000]" = 21 +"policyengine_uk/tests/test_marginal_rates_hold_behavioural_responses.py::test_marginal_rates_hold_the_labour_supply_response[marginal_tax_rate_on_capital_gains-22000-0-changes0]" = 21 +"policyengine_uk/tests/test_claims_all_entitled_benefits.py::TestPerBenefitUnit::test_reporters_of_any_of_the_seven_are_false" = 21 +"policyengine_uk/tests/test_marginal_rates_hold_behavioural_responses.py::test_marginal_tax_rate_holds_the_capital_gains_response[13000]" = 21 +"policyengine_uk/tests/test_latest_data_smoke.py::test_universal_credit_aggregate_in_range" = 21 +"policyengine_uk/tests/test_capital_gains_response_default.py::test_pay_rise_branches_hold_the_realisation_response" = 21 +"policyengine_uk/tests/code_health/test_cached_arrays_not_written_in_place.py::test_branching_runs_with_read_only_cache[capital_gains_responses]" = 21 +"policyengine_uk/tests/microsimulation/test_state_pension_reform.py::test_basic_state_pension_responds_to_reform" = 21 +"policyengine_uk/tests/test_council_tax_reduction_pensioner_earnings_disregard_properties.py::test_disregard_is_the_statutory_weekly_sum_in_every_year" = 21 +"policyengine_uk/tests/test_marginal_rates_hold_behavioural_responses.py::test_marginal_rates_hold_the_labour_supply_response[marginal_tax_rate_wrt_employer_cost-0-10000-changes2]" = 21 +"policyengine_uk/tests/test_disable_simulated_benefits_winter_heating.py::test_reform_sets_reported_benefits[Simulation]" = 21 +"policyengine_uk/tests/test_reform_representations.py::test_microsimulation_accepts_reform_classes[tuple]" = 21 +"policyengine_uk/tests/test_uc_unearned_benefits_properties.py::test_carer_support_payment_above_the_cap_does_not_change_uc" = 20 +"policyengine_uk/tests/test_capital_gains_response_default.py::test_the_default_is_an_explicit_elasticity_of_one[reform-Simulation]" = 20 +"policyengine_uk/tests/test_reform_representations.py::test_parametric_reform_representations_match_the_dict[modify_parameters]" = 20 +"policyengine_uk/tests/test_uc_single_claim_properties.py::test_examples_reach_the_cases" = 20 +"policyengine_uk/tests/test_capital_gains_response_default.py::test_the_default_is_an_explicit_elasticity_of_one[reform-Microsimulation]" = 20 +"policyengine_uk/tests/test_housing_benefit_earnings_disregard_properties.py::test_disregard_is_bounded_by_net_earnings_and_the_statutory_maximum" = 20 +"policyengine_uk/tests/test_ni_threshold_freeze.py::test_liabilities_at_threshold_edges_and_random_levels" = 20 +"policyengine_uk/tests/test_disable_simulated_benefits_winter_heating.py::test_a_household_that_moves_is_paid_under_each_years_scheme[LONDON-SCOTLAND]" = 20 +"policyengine_uk/tests/test_capital_gains_responses.py::test_revenue_falls_short_of_the_static_estimate" = 20 +"policyengine_uk/tests/test_capital_gains_response_default.py::test_employer_cost_branches_hold_the_realisation_response" = 20 From aa09c20d8fc4f084fb3bcd188000a61006888040 Mon Sep 17 00:00:00 2001 From: vahid-ahmadi Date: Sun, 25 Oct 2026 23:46:49 +0000 Subject: [PATCH 3/3] Drop the shard-duration entry for a test main renamed #2040 (9d3a9be5a) replaced test_frs_shaped_units_keep_the_under_20_presumption, so after merging main the existence check in test_ci_test_shards.py failed on its table line. The test it became is placed by the hash until the table is regenerated. The table's header said a stale entry was harmless; it now says the check fails on one and what a renaming PR should do. Co-Authored-By: Claude Opus 5.5 --- policyengine_uk/tests/shard_durations.toml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/policyengine_uk/tests/shard_durations.toml b/policyengine_uk/tests/shard_durations.toml index d4ee328c75..2c52eb6701 100644 --- a/policyengine_uk/tests/shard_durations.toml +++ b/policyengine_uk/tests/shard_durations.toml @@ -7,9 +7,11 @@ # all five Python shards of nine runs on 24 October 2026, each test's mean # over the runs: merge queue runs 40050881130, 40059344467, 40063244949, # 40067189795, 40071060766, 40079467297, 40083761750 and 40087883891, and -# pull request run 40095846881. A test here that no longer exists is -# harmless; a slow test not here is placed by the hash. Regenerate when a -# shard drifts well above the others. +# pull request run 40095846881. A slow test not here is placed by the hash. +# test_ci_test_shards.py fails if an entry names a test that no longer +# exists, so a pull request that renames or removes a listed test should +# rename or delete its line here. Regenerate when a shard drifts well above +# the others. [seconds] "policyengine_uk/tests/test_capital_share_components.py::test_capital_matches_the_original_lists" = 1299 "policyengine_uk/tests/test_statutory_pension_edges.py::test_nics_cap_preserves_aa_inputs_and_charge_with_fixed_ordinary_tax[2029]" = 761 @@ -220,7 +222,6 @@ "policyengine_uk/tests/test_dfe_childcare_student_support_properties.py::test_care_to_learn_pays_each_child_once_up_to_the_per_child_cap" = 84 "policyengine_uk/tests/test_child_and_adult_definitions_properties.py::test_member_far_below_a_flagged_claimant_is_never_their_partner" = 84 "policyengine_uk/tests/test_process_time_reforms.py::test_a_triple_lock_rate_set_by_reform_uprates_the_state_pension[via_reform_dict-generated-interval]" = 83 -"policyengine_uk/tests/test_child_and_adult_definitions_properties.py::test_frs_shaped_units_keep_the_under_20_presumption" = 83 "policyengine_uk/tests/test_carers_allowance_pension_contribution_deduction_rate_properties.py::test_earnings_fall_by_contributions_times_the_change_in_share" = 83 "policyengine_uk/tests/test_child_and_adult_definitions_properties.py::test_any_benefit_unit_has_at_most_two_claimants_or_partners" = 83 "policyengine_uk/tests/test_household_head_agreement_properties.py::test_every_programme_reads_one_head" = 82