docs: def ensure_rng(rng, impl='numpy'):
      """
      Returns a random number generator
  
      Example:
          >>> # ENABLE_DOCTEST
          >>> from utool.util_numpy import *  # NOQA
          >>> import utool as ut
          >>> import numpy as np
          >>> num = 4
          >>> print('--- Python as PYTHON ---')
          >>> py_rng = random.Random(0)
          >>> pp_nums = [py_rng.random() for _ in range(num)]
          >>> print(pp_nums)
          >>> print('--- Numpy as PYTHON ---')
          >>> np_rng = ut.ensure_rng(random.Random(0), impl='numpy')
          >>> np_nums = [np_rng.rand() for _ in range(num)]
          >>> print(np_nums)
          >>> print('--- Numpy as NUMPY---')
          >>> np_rng = np.random.RandomState(seed=0)
          >>> nn_nums = [np_rng.rand() for _ in range(num)]
          >>> print(nn_nums)
          >>> print('--- Python as NUMPY---')
          >>> py_rng = ut.ensure_rng(np.random.RandomState(seed=0), impl='python')
          >>> pn_nums = [py_rng.random() for _ in range(num)]
          >>> print(pn_nums)
          >>> assert np_nums == pp_nums
          >>> assert pn_nums == nn_nums
      """
      if impl == 'numpy':
          if rng is None:
              rng = np.random
          elif isinstance(rng, int):
              rng = np.random.RandomState(seed=rng)
          elif isinstance(rng, random.Random):
              # Convert python to numpy random state
              py_rng = rng
              pystate = py_rng.getstate()
              npstate = _pystate_to_npstate(pystate)
              rng = np_rng = np.random.RandomState(seed=0)
              np_rng.set_state(npstate)
      elif impl == 'python':
          if rng is None:
              rng = random
          elif isinstance(rng, int):
              rng = random.Random(rng)
          elif isinstance(rng, np.random.RandomState):
              # Convert numpy to python random state
              np_rng = rng
              npstate = np_rng.get_state()
              pystate = _npstate_to_pystate(npstate)
              rng = py_rng = random.Random(0)
              py_rng.setstate(pystate)
      else:
          raise KeyError('unknown rng impl={}'.format(impl))
      return rng