/// Multiplier>`, meaning that it can convert the previous multiplier to the next one. This should
/// be called on `on_finalize` of a block, prior to potentially cleaning the weight data from the
/// Where `(s', v)` must be given as the `Get` implementation of the `T` generic type. Moreover, `M`
/// must provide the minimum allowed value for the multiplier. Note that a runtime should ensure
/// with tests that the combination of this `M` and `V` is not such that the multiplier can drop to
/// Note that `s'` is interpreted as a portion in the _normal transaction_ capacity of the block.
/// For example, given `s' == 0.25` and `AvailableBlockRatio = 0.75`, then the target fullness is
/// dimensions using the ratio of `dimension_value / max_dimension_value` and selecting the largest
/// `proof_size`, we identify `ref_time` as the limiting dimension, indicating that the block is 30%
// Defensive only. The multiplier in storage should always be at most positive. Nonetheless
// we recover here in case of errors, because any value below this would be stale and can
// Normalize dimensions so they can be compared. Ensure (defensive) max weight is non-zero.
// defensive only, a test case assures that the maximum weight diff can fit in Multiplier
let diff = Multiplier::saturating_from_rational(diff_abs, max_limiting_dimension.max(1));
/// impl. Note that the input `weight` is capped by the maximum block weight before computation.
/// Require the transactor pay for themselves and maybe include a tip to gain additional priority
/// Operational transactions will receive an additional priority bump, so that they are normally