code: def gaussian_mutation(random, candidate, args):
      
      mut_rate = args.setdefault('mutation_rate', 0.1)
      mean = args.setdefault('gaussian_mean', 0.0)
      stdev = args.setdefault('gaussian_stdev', 1.0)
      bounder = args['_ec'].bounder
      mutant = copy.copy(candidate)
      for i, m in enumerate(mutant):
          if random.random() < mut_rate:
              mutant[i] += random.gauss(mean, stdev)
      mutant = bounder(mutant, args)
      return mutant
docs: Return the mutants created by Gaussian mutation on the candidates.
  
      This function performs Gaussian mutation. This function  
      makes use of the bounder function as specified in the EC's 
      ``evolve`` method.
  
      .. Arguments:
         random -- the random number generator object
         candidate -- the candidate solution
         args -- a dictionary of keyword arguments
  
      Optional keyword arguments in args:
      
      - *mutation_rate* -- the rate at which mutation is performed (default 0.1)
      - *gaussian_mean* -- the mean used in the Gaussian function (default 0)
      - *gaussian_stdev* -- the standard deviation used in the Gaussian function
        (default 1)
        
      The mutation rate is applied on an element by element basis.