code: def random_permutation(iterable, r=None):
      
      pool = tuple(iterable)
      r = len(pool) if r is None else r
      return tuple(sample(pool, r))
docs: Return a random *r* length permutation of the elements in *iterable*.
  
      If *r* is not specified or is ``None``, then *r* defaults to the length of
      *iterable*.
  
          >>> random_permutation(range(5))  # doctest:+SKIP
          (3, 4, 0, 1, 2)
  
      This equivalent to taking a random selection from
      ``itertools.permutations(iterable, r)``.