class_docstr: A general Metropolis-Hastings proposal
  
  Concrete implementations can be made by providing a ``proposal_function``
  argument that implements the proposal as described below.
  For standard Gaussian Metropolis moves, :class:`moves.GaussianMove` can be
  used.
  
  Args:
      proposal_function: The proposal function. It should take 2 arguments: a
          numpy-compatible random number generator and a ``(K, ndim)`` list
          of coordinate vectors. This function should return the proposed
          position and the log-ratio of the proposal probabilities
          (:math:`\ln q(x;\,x^\prime) - \ln q(x^\prime;\,x)` where
          :math:`x^\prime` is the proposed coordinate).
      ndim (Optional[int]): If this proposal is only valid for a specific
          dimension of parameter space, set that here.
code: def __init__(self, proposal_function, ndim=None):
      self.ndim = ndim
      self.get_proposal = proposal_function
  
imports: import numpy
  from ..state import State
  from .move import Move
label_desc: Use image node_id 1 to create a new MHMove object from inherited base classes: Move with example: obj = MHMove(proposal_function, ndim)