def METHOD_NAME(
    self,
    sampler: "sampler.MetropolisSampler",  # noqa: F821
    machine: nn.Module,
    params: PyTree,
    sampler_state: "sampler.SamplerState",  # noqa: F821
) -> Optional[Any]:
    rule_states = []
    for i in range(self.hilbert._n_hilbert_spaces):
        # construct temporary sampler and rule state with correct sub-hilbert and
        # sampler-state objects.
        _sampler = sampler.replace(hilbert=self.hilbert.subspaces[i])
        _state = sampler_state.replace(rule_state=sampler_state.rule_state[i])
        rule_states.append(self.rules[i].METHOD_NAME(_sampler, machine, params, _state))
    return tuple(rule_states)