code: def mutation(pop_t, alpha, rho, eps):
      """
      Add random noise to the population to explore the search space.
  
      Alpha controls the scale of the noise, rho controls the number of features
      that are perturbed.
      """
      # alpha and eps both have shape [B]
      perturb_noise = 2 * torch.rand(*pop_t.shape) - 1
      perturb_noise = (
          perturb_noise * alpha[:, None, None] * eps[:, None, None]
      )
  
      mask = (torch.rand(*pop_t.shape) > rho[:, None, None]).float()
  
      return pop_t + mask * perturb_noise
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  from __future__ import unicode_literals
  from typing import Optional
  from math import inf
  import torch
  import torch.nn.functional
  from advertorch.attacks.base import Attack
  from advertorch.attacks.base import LabelMixin
  from .utils import _check_param, _flatten, _make_projector
label_desc: Use image node_id 5 for calling a global function with example usage: mutation(pop_t, alpha, rho, eps) and returns: unknown