def METHOD_NAME(operator):
    """
    Rule proposing moves according to the terms in an operator.
    In this case, the transition matrix is taken to be:
    .. math::
       T( \\mathbf{s} \\rightarrow \\mathbf{s}^\\prime) = \\frac{1}{\\mathcal{N}(\\mathbf{s})}\\theta(|H_{\\mathbf{s},\\mathbf{s}^\\prime}|),
    This is a thin wrapper on top of the constructors of :class:`netket.sampler.rules.HamiltonianRuleJax` and
    :class:`netket.sampler.rules.HamiltonianRuleNumba`, which dispatches on one of the two implementations
    depending on whether the operator specified is jax-compatible (:class:`netket.operator.DiscreteJaxOperator`)
    or not.
    """
    if isinstance(operator, DiscreteJaxOperator):
        return HamiltonianRuleJax(operator)
    else:
        return HamiltonianRuleNumba(operator)