docstr: Given a tensor of shape [None, ...] where ... indicates input dimensions,
  returns a random shuffling of that input.
  Args:
      input_tensor: An input tensor of shape [None, ...], where ...
                    indicates the input dimensions.
      return_func: Whether or not to return a function as opposed to a tensor.
      shuffle: If true, shuffles randomly along the batch axis. If false, 
               rolls deterministically along the batch axis.
  Returns:
      A tensor of shape [None, k, ...]. A background reference operation.
code: def _permuted_references(self, input_tensor, k, shuffle=False):
      """
      Given a tensor of shape [None, ...] where ... indicates input dimensions,
      returns a random shuffling of that input.
      Args:
          input_tensor: An input tensor of shape [None, ...], where ...
                        indicates the input dimensions.
          return_func: Whether or not to return a function as opposed to a tensor.
          shuffle: If true, shuffles randomly along the batch axis. If false,
                   rolls deterministically along the batch axis.
      Returns:
          A tensor of shape [None, k, ...]. A background reference operation.
      """
      if shuffle:
          shuffle_list = [tf.random.shuffle(input_tensor)] * k
      else:
          shuffle_list = [
              tf.manip.roll(input_tensor, shift=i, axis=0)
              for i in range(1, k + 1)
          ]
      return tf.stack(shuffle_list, axis=1, name="background_ref_op")
  
file_path: attributionpriors/attributionpriors/ops.py
imports: import tensorflow
  import numpy
label_desc: Use image node_id 2 for calling the AttributionPriorExplainer obj's underlying member method code with example usage: obj._permuted_references(input_tensor, k, shuffle) and returns: tf