samplingResolution function
The typical gap between readings, or zero when there are too few distinct times for that to mean anything.
Readings much closer together than the typical gap (two weighings on one morning) are counted as one visit, and the result is the median gap between visits. The median rather than the mean, so that a diary with a fortnight's holiday in it still counts as daily; visits rather than raw gaps, so that weighing twice most mornings does not make it count as sampled every five minutes.
This is what a shape parameter measured in time units has to clear to be a different model rather than a second spelling of measurement noise; see Component.parameterSpecsAt.
Implementation
double samplingResolution(List<Observation> observations) =>
typicalGap([for (final o in observations) o.time]);