Skip to content

[PROBE] mass/time-origin-invariance: paired calendar shifts #10

Description

@SiavashShams

Conservation law

mass

Residual equation

I'd like to contribute the roadmap's mass/time-origin-invariance probe, including implementation, validation and the methods write-up. My background is in ML evaluation and reproducible testing; I'd need your team's review of the hydrology assumptions before settling the scope.

For identical forcing, initial state, catchment parameters and seasonal inputs, changing only the calendar year should preserve outputs at corresponding elapsed timesteps.

For x in {evspsbl, mrro, mrso, snw, canopy}, define r_x(t) = x_shifted(t) - x_control(t). Flux differences have units mm/day; state differences have units mm. Compare row positions after identical spinup.

Also check each run's water budget: R(t) = pr(t) - evspsbl(t) - mrro(t) - [S(t) - S(t-1)]/dt, where S = mrso + snw + canopy and R has units mm/day.

Tolerance and its denominator

Proposed starting tolerance, pending reference-model validation and physics review:

max_t |r_x(t)| <= 1e-9 * max(mean_t |x_control(t)|, 1 native unit), where a native unit is 1 mm/day for fluxes or 1 mm for states. This provides an explicit 1e-9 native-unit absolute floor near zero. The strict tolerance tests an exact symmetry; it is not a measured result.

The current criterion uses a 1e-12 denominator floor. I'd discuss configurable absolute-tolerance handling and report exact-model deviations before fixing the threshold.

For separate water-budget closure, use |sum_t R(t) dt| / sum_t pr(t) dt <= 0.05. Require positive accumulated precipitation in the scored window; zero-rain cases cannot pass through an undefined denominator.

How would an unphysical model fail this?

reference_calendar is the main negative control: its calendar-year-dependent recession factor can conserve mass while changing the paired outputs. It must fail invariance specifically. reference_bucket should pass every declared criterion.

Zero or constant outputs can satisfy equality without useful hydrology. Retain non_degenerate checks and require reference_degenerate to fail there. Verify the declared failure mapping across seeds and reject missing or misaligned output rows. A passing result establishes this symmetry only, not complete physical correctness.

How is the case generated?

Start from the invariance template. Generate seeded daily precipitation, temperature and PET with wet/dry periods and varied storms. Reuse exactly the same numerical forcing, static attributes, initial state and model random seed for both variants.

Use 4,015 rows: 365 spinup plus 3,650 scored steps. Start calendars on 2000-01-01 and 1972-01-01. The 28-year shift preserves month/day, day-of-year, weekday and leap-day positions over this window; these calendar properties were checked with Python datetime.

Assert equal non-time inputs, row counts, daily intervals, seasonal features and spinup treatment. Exclude year-specific changes in land use, infrastructure or physical parameters. Resolve any adapter-derived date-dependent inputs with the maintainer before interpreting failures.

Deliver one seeded generator, probe.yaml, reproducibility checks, CPU reference validation and a methods/limitations write-up. No model runs or probe implementation have been completed.

Could you confirm availability, the proposed scope under the merged-probe authorship policy, and the intended paper timeline and venue?

Will you build it?

Yes — assign it to me

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    acceptedProposal approved and assignedprobe-proposalA proposed new probe

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions